12/08/2018, 14:29

Giới thiệu gem ZenginCode in ruby

1.Giới thiệu ZenginCode là một datasets chứa các mã ngân hàng ( bank_code ) và mã chi nhánh ( branch_code ) của tất cả các ngân hàng của Nhật Bản. Nó có thể dùng để quick_check validation của input bank information của hệ thống. ZenginCode hỗ trợ rất nhiều các ngôn ngữ khác nhau trong đó có ...

1.Giới thiệu

ZenginCode là một datasets chứa các mã ngân hàng ( bank_code ) và mã chi nhánh ( branch_code ) của tất cả các ngân hàng của Nhật Bản. Nó có thể dùng để quick_check validation của input bank information của hệ thống.

ZenginCode hỗ trợ rất nhiều các ngôn ngữ khác nhau trong đó có ruby, danh sách các ngôn ngữ được hỗ trợ các bạn có thể xem tại đây

Trong bài viết này, tôi xin phép chỉ viết demo sử dụng gem ZenginCode trong Ruby. Chúng ta cùng nhau xây dựng một ứng dụng rails lưu thông tin ngân hàng của các User. Dùng gem zengin_code để check validation các trường input của bank_account

Source_data của ZenginCode được cung trực tiếp bởi trang tra cứu các ngân hàng của Nhật

http://ykaku.com/ginkokensaku/index.php

ginko.png

2.Cài đặt và sử dụng

2.1.Cài đặt

  • Tạo một project mới.
$ rails new zengin_code_demo -d mysql
  • Add thêm gem zengin_code vào Gemfile
#Gemfile

gem 'zengin_code'
  • Chạy bundle install
$ bundle install

hoặc

$ gem install zengin_code

2.2.Sử dụng

Thêm model BankAccount với chức năng thêm sửa xóa cơ bản bằng lệnh dưới đây.

$ rails generate scaffold BankAccount bank_code:string bank_name:string branch_code:string branch_name:string account_number:string account_holder:string

Ở đây chúng ta đã tạo ra bảng BankAccount với đầy đủ các trường:

  • bank_code #mã ngân hàng
  • bank_name #tên ngân hàng
  • branch_code #mã chi nhánh
  • branch_name #tên chi nhánh
  • account_number #số tài khoản
  • account_holder #tên chủ tài khoản

Để có thể sử dụng được ZenginCode trong các models, controllers của Rails chúng ta cần thêm require 'zengin_code' .

#app/models/bank_account.rb

require 'zengin_code'
class BankAccount < ApplicationRecord
  end
end

Ở đây chúng ta có thể đặt thử binding.pry vào để kiểm tra xem gem zengin_code đã load được chưa và xem xem ZenginCode có cấu trúc như thế nào. Chúng ta có thể sử dụng các lệnh sau đây để tương tác với zengin_code:

  • Kiểm tra tất cả các ngân hàng có trong thư viện bằng lệnh ZenginCode::Bank.all

  • Kiểm tra trong thư viện có bao nhiêu ngân hàng ZenginCode::Bank.all.count

  • Lấy ra tất cả các mã ngân hàng có trong thư viện theo dạng mảng. ZenginCode::Bank.all.keys

  • Kiểm tra thông tin của ngân hàng có bank_code là 0001: ZenginCode::Bank.all['0001']

tiếp theo chúng ta có thể truy vấn xem tên của ngân hàng này theo các dạng tên thường viết bằng tiếng nhật, tên viết theo hiragana, tên viết theo katakana và tên viết theo chữ romaji bằng các lệnh như bên dưới đây:

  • Load tất cả các chi nhánh có trong ngân hàng có bank_code '0001' : ZenginCode::Bank.all['0001'].branches

  • Kiểm tra xem trong ngân hàng 0001 có bao nhiêu chi nhánh: ZenginCode::Bank.all['0001'].branches.count

  • Lấy ra tất cả các mã chi nhánh của ngân hàng 0001 theo dạng mảng: ZenginCode::Bank.all['0001'].branches.keys

  • Kiểm tra thông tin của chi nhánh 001 của ngân hàng 0001: ZenginCode::Bank.all['0001'].branches['001']

Ở đây, giống như bên trên, chúng ta có thể truy vấn xem tên chi nhánh này của ngân hàng 0001 theo các dạng tên thường viết bằng tiếng nhật, tên viết theo hiragana, tên viết theo katakana và tên viết theo chữ romaji bằng các lệnh như bên dưới đây:

Như vậy chúng ta cơ bản đã tìm hiểu xong cấu trúc lưu trữ dữ liệu của gem zengin_code. Tiếp theo chúng ta có thể bắt tay vào viết hàm check_validate cho các trường trong form input.

2.3.Viết hàm check_validate

Trước tiên chúng ta cần validate presence: true tất cả các trường cần thiết(các trường không được để trống.)

#app/models/bank_account.rb

require 'zengin_code'
class BankAccount < ApplicationRecord
  validates :bank_code, :bank_name, presence: true
  validates :branch_code, :branch_name, :account_number, :account_holder, presence: true
  end
end

Tiếp theo chúng ta viết thêm một hàm check_bank_info để check validate của các trường nhập vào. Ở đây chúng ta cần check các điều kiện sau:

  • Mã ngân hàng nhập vào có tồn tại hay không.
  • Tên ngân hàng nhập vào có khớp với tên ngân hàng có mã ngân hàng như trên trong hệ thống hay không.
  • Mã chi nhánh nhập vào có tồn tại trong ngân hàng có mã ngân hàng như ở trên hay không.
  • Tên chi nhánh nhập vào có khớp với tên chi nhánh có mã như trên trong hệ thống hay không.
#app/models/bank_account.rb

require 'zengin_code'
class BankAccount < ApplicationRecord
  validates :bank_code, :bank_name, presence: true
  validates :branch_code, :branch_name, :account_number, :account_holder, presence: true
  validate :check_bank_info

  def check_bank_info
    banks = ZenginCode::Bank.all
    return errors.add(:bank_code, I18n.t('errors.messages.bank_code_not_exist')) if banks[bank_code].nil?
    bank_code_name = banks[bank_code].name
    return errors.add(:bank_name, I18n.t('errors.messages.bank_name_not_exist')) unless bank_code_name === bank_name
    branches = banks[bank_code].branches
    return errors.add(:branch_code, I18n.t('errors.messages.branch_code_not_exist')) if branches[branch_code].nil?
    branch_code_name = banks[bank_code].branches[branch_code].name
    errors.add(:branch_name, I18n.t('errors.messages.branch_name_not_exist')) unless branch_code_name === branch_name
  end
end

Nếu thỏa mãn các điều kiện trên thì thông tin ngân hàng nhập vào mới hợp lệ.

3.Lời Kết và Tài Liệu tham khảo.

Như vậy tôi đã giới thiệu xong với các bạn về cấu trúc và cách sử dụng gem 'zengin_code'. Việc cài đặt và sử dụng gem này cũng khá đơn giản, chúc các bạn thành công trong việc áp dụng gem này vào trong dự án của các bạn.

Toàn bộ tài liệu tham khảo ở đây: https://github.com/zengin-code/zengin-rb

0