rus_bank_rails
Rails-обертка вокруг гема rus_bank - https://github.com/wildDAlex/rus_bank
Получаемая через Soap-сервисы ЦБ РФ информация 'кешируется' в базу данных, тем самым минимизируется количество внешних вызовов. По мере устаревания записей происходит обновление базы данных.
Установка
Добавляем в gemfile:
gem 'rus_bank_rails'
Далее:
$ bundle install
Запускаем генератор:
$ rails generate rus_bank_rails Bank
, где Bank - имя генерируемой модели. Генератор создаст файлы миграции и файлы модели, для банков и для регионов.
Выполняем миграцию:
$ rake db:migrate
На этом все.
Пример использования:
internal_code = Bank.bic_to_int_code(some_bank_bic) #, где Bank - имя модели.
Далее можно кастомизировать модель по своему усмотрению. Например, в модели можно переопределить поведение тех или иных методов гема. Например, логика определения, требуется ли возвращать банк из базы или тянуть из API ЦБ, построена на том факте, что справочник БИК вступает в действие в 0:00 по московскому времени на всей территории страны. Т.е. если дата обновления записи(по MSK) в бд не текущие сутки, то обновляем ее. Можно поменять эту логику, переопределив метод expire?
в app/models/bank.rb
своего приложения:
def expire?
self.updated_at < 1.minute.ago # Например, обновляем все, что старше минуты
end
Подобным образом переопределям любое поведение гема.
Кроме того, следует иметь в виду, что часть методов при каждом вызове "дергает" внешнее API(о чем упомянуто в описании соответствующего метода) и при этом сохраняет результат в базу, что может сказаться на отклике вашего приложения. Например, search_by_name("")
вернет все банки из API и при этом добавит/обновит их в базе, что крайне накладно(на каждый банк, что требуется обновить, вызов внешнего сервиса). Потому стоит использовать подобные методы с осторожностью, как вариант выполнять их отложенно.
Также стоит упомянуть, что актуализация списка регионов не ведется при работе с методами банков(отдельно регионы не представлены в API ЦБ, а запрос полного списка регионов накладен). Необходимо самостоятельно иногда обновлять список регионов:
BankRegion.update_regions #, где BankRegion - имя модели, сгенерированное генератором для регионов
Описание доступных методов тут - http://rubydoc.info/gems/rus_bank_rails/frames/RusBankRails/ActsAsBank
Copyright
Copyright (c) 2014 Denis Aleksandrov. See LICENSE.txt for further details.