rus_bank_rails 1.4.4 → 1.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/README.md CHANGED
@@ -23,7 +23,7 @@ Rails-обертка вокруг гема rus_bank - https://github.com/wildDAl
23
23
  $ rails generate rus_bank_rails Bank
24
24
 
25
25
  , где Bank - имя генерируемой модели.
26
- Генератор создаст файл миграции и файл модели.
26
+ Генератор создаст файлы миграции и файлы модели, для банков и для регионов.
27
27
 
28
28
  Выполняем миграцию:
29
29
 
@@ -45,6 +45,10 @@ Rails-обертка вокруг гема rus_bank - https://github.com/wildDAl
45
45
 
46
46
  Кроме того, следует иметь в виду, что часть методов при каждом вызове "дергает" внешнее API(о чем упомянуто в описании соответствующего метода) и при этом сохраняет результат в базу, что может сказаться на отклике вашего приложения. Например, `search_by_name("")` вернет все банки из API и при этом добавит/обновит их в базе, что крайне накладно(на каждый банк, что требуется обновить, вызов внешнего сервиса). Потому стоит использовать подобные методы с осторожностью, как вариант выполнять их отложенно.
47
47
 
48
+ Также стоит упомянуть, что актуализация списка регионов не ведется при работе с методами банков(отдельно регионы не представлены в API ЦБ, а запрос полного списка регионов накладен). Необходимо самостоятельно иногда обновлять список регионов:
49
+
50
+ BankRegion.update_regions #, где BankRegion - имя модели, сгенерированное генератором для регионов
51
+
48
52
  Описание доступных методов тут - http://rubydoc.info/gems/rus_bank_rails/frames/RusBankRails/ActsAsBank
49
53
 
50
54
  ## Copyright
@@ -0,0 +1,8 @@
1
+ class ModelName < ActiveRecord::Base
2
+ acts_as_bank
3
+
4
+ belongs_to _belongs_to_model_, foreign_key: 'reg_code', primary_key: 'reg_code'
5
+
6
+ serialize :licences, Array
7
+
8
+ end
@@ -1,4 +1,4 @@
1
- class CreateMigration < ActiveRecord::Migration
1
+ class CreateBanks < ActiveRecord::Migration
2
2
  def change
3
3
  create_table table_name, force: true do |t|
4
4
  t.integer "reg_number"
@@ -13,12 +13,15 @@ class CreateMigration < ActiveRecord::Migration
13
13
  t.string "ustav_adr"
14
14
  t.string "fact_adr"
15
15
  t.string "director"
16
- t.string "ust_money"
16
+ t.string "ust_money"
17
17
  t.string "org_status"
18
18
  t.integer "reg_code"
19
19
  t.date "ssv_date"
20
20
  t.text "licences"
21
21
  t.timestamps
22
22
  end
23
+ add_index table_name, :reg_code
24
+ add_index table_name, :internal_code
25
+ add_index table_name, :bic
23
26
  end
24
27
  end
@@ -0,0 +1,10 @@
1
+ class CreateRegions < ActiveRecord::Migration
2
+ def change
3
+ create_table table_name, force: true do |t|
4
+ t.integer "reg_code"
5
+ t.string "cname"
6
+ t.timestamps
7
+ end
8
+ add_index table_name, :reg_code, :unique => true
9
+ end
10
+ end
@@ -0,0 +1,7 @@
1
+ class ModelName < ActiveRecord::Base
2
+ has_many _has_many_model_, foreign_key: 'reg_code', primary_key: 'reg_code'
3
+
4
+ def to_s
5
+ self.cname
6
+ end
7
+ end
@@ -2,16 +2,34 @@ class RusBankRailsGenerator < Rails::Generators::NamedBase
2
2
  source_root File.expand_path('../rus_bank_rails_generator', __FILE__)
3
3
 
4
4
  def generate
5
- migration_file_name = "db/migrate/#{Time.now.strftime("%Y%m%d%H%M%S")}_create_#{plural_name.parameterize.underscore}.rb"
6
- model_file_name = "app/models/#{file_name.parameterize.underscore}.rb"
5
+ # Banks
6
+ banks_migration_file_name = "db/migrate/#{Time.now.strftime("%Y%m%d%H%M%S")}_create_#{plural_name.parameterize.underscore}.rb"
7
+ banks_model_file_name = "app/models/#{file_name.parameterize.underscore}.rb"
7
8
 
8
- copy_file "templates/migration.rb", migration_file_name
9
- copy_file "templates/model.rb", model_file_name
9
+ copy_file "templates/create_banks.rb", banks_migration_file_name
10
+ copy_file "templates/banks_model.rb", banks_model_file_name
10
11
 
11
- gsub_file migration_file_name, 'CreateMigration', "create_#{plural_name.parameterize.underscore}".camelize
12
- gsub_file migration_file_name, 'table_name', ":#{plural_name.parameterize.underscore}"
12
+ gsub_file banks_migration_file_name, 'CreateBanks', "create_#{plural_name.parameterize.underscore}".camelize
13
+ gsub_file banks_migration_file_name, 'table_name', ":#{plural_name.parameterize.underscore}"
13
14
 
14
- gsub_file model_file_name, 'ModelName', "#{file_name.parameterize.underscore.camelize}"
15
+ gsub_file banks_model_file_name, 'ModelName', "#{file_name.parameterize.underscore.camelize}"
16
+
17
+ gsub_file banks_model_file_name, '_belongs_to_model_', ":#{file_name.parameterize.underscore}_region"
18
+
19
+ # Regions
20
+ sleep(1.second) # Sleep to avoid two files with the same timestamp
21
+ regions_migration_file_name = "db/migrate/#{Time.now.strftime("%Y%m%d%H%M%S")}_create_#{file_name.parameterize.underscore}_regions.rb"
22
+ regions_model_file_name = "app/models/#{file_name.parameterize.underscore}_region.rb"
23
+
24
+ copy_file "templates/create_regions.rb", regions_migration_file_name
25
+ copy_file "templates/regions_model.rb", regions_model_file_name
26
+
27
+ gsub_file regions_migration_file_name, 'CreateRegions', "create_#{file_name.parameterize.underscore}_regions".camelize
28
+ gsub_file regions_migration_file_name, 'table_name', ":#{file_name.parameterize.underscore}_regions"
29
+
30
+ gsub_file regions_model_file_name, 'ModelName', "#{file_name.parameterize.underscore.camelize}Region"
31
+
32
+ gsub_file regions_model_file_name, '_has_many_model_', ":#{plural_name.parameterize.underscore}"
15
33
  end
16
34
 
17
35
 
@@ -370,7 +370,7 @@ module RusBankRails
370
370
  def expire?
371
371
  time = Time.now.in_time_zone("Moscow")
372
372
  updated_at = self.updated_at.in_time_zone("Moscow")
373
- not( (updated_at.day == time.day) && (updated_at.month == time.month) && (updated_at.year == time.year) )
373
+ not( (updated_at.day == time.day) && (updated_at.month == time.month) && (updated_at.year == time.year) ) # wtf?
374
374
  end
375
375
 
376
376
  ##
@@ -0,0 +1,46 @@
1
+ # encoding: utf-8
2
+ require 'savon'
3
+ require 'rus_bank'
4
+
5
+ module RusBankRails
6
+ module ActsAsRegion
7
+ extend ActiveSupport::Concern
8
+
9
+ included do
10
+ end
11
+
12
+ module ClassMethods
13
+
14
+ ##
15
+ # Список регионов.
16
+ # Метод делегирует вызов к соответствующему методу RusBank.
17
+ # В базу не сохраняет, все результаты онлайн из API ЦБ.
18
+ # == Returns:
19
+ # Возвращает массив хэшей вида {:reg_code=>"Внутренний код региона", :cname=>"Название региона"}
20
+
21
+ def regions_enum
22
+ cbr = RusBank.new
23
+ cbr.RegionsEnum
24
+ end
25
+
26
+ ##
27
+ # Обновляет список регионов в базе.
28
+
29
+ def update_regions
30
+ regions = regions_enum
31
+ regions.each do |region|
32
+ db_region = self.where(reg_code: region[:reg_code]).first
33
+ if db_region
34
+ db_region.update(region)
35
+ else
36
+ new_region = self.new(region)
37
+ new_region.save
38
+ end
39
+ end
40
+ end
41
+
42
+ end
43
+ end
44
+ end
45
+
46
+ ActiveRecord::Base.send :include, RusBankRails::ActsAsRegion
@@ -1,3 +1,3 @@
1
1
  module RusBankRails
2
- VERSION = "1.4.4"
2
+ VERSION = "1.5.1"
3
3
  end
@@ -1,4 +1,5 @@
1
1
  require "rus_bank_rails/acts_as_bank"
2
+ require "rus_bank_rails/acts_as_region"
2
3
 
3
4
  module RusBankRails
4
5
  end
@@ -0,0 +1,3 @@
1
+ class BankRegion < ActiveRecord::Base
2
+ has_many :banks, foreign_key: 'reg_code', primary_key: 'reg_code'
3
+ end
Binary file
@@ -0,0 +1,9 @@
1
+ class CreateRegions < ActiveRecord::Migration
2
+ def change
3
+ create_table :bank_regions do |t|
4
+ t.integer "reg_code"
5
+ t.string "cname"
6
+ t.timestamps
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ class AddIndexes < ActiveRecord::Migration
2
+ def change
3
+ add_index :banks, :reg_code
4
+ add_index :banks, :internal_code
5
+ add_index :banks, :bic
6
+
7
+ add_index :bank_regions, :reg_code, :unique => true
8
+ end
9
+ end
@@ -0,0 +1,8 @@
1
+ class CreateBankRegions < ActiveRecord::Migration
2
+ def change
3
+ create_table :bank_regions do |t|
4
+
5
+ t.timestamps
6
+ end
7
+ end
8
+ end
@@ -11,7 +11,16 @@
11
11
  #
12
12
  # It's strongly recommended that you check this file into your version control system.
13
13
 
14
- ActiveRecord::Schema.define(version: 20140310145403) do
14
+ ActiveRecord::Schema.define(version: 20140426220130) do
15
+
16
+ create_table "bank_regions", force: true do |t|
17
+ t.integer "reg_code"
18
+ t.string "cname"
19
+ t.datetime "created_at"
20
+ t.datetime "updated_at"
21
+ end
22
+
23
+ add_index "bank_regions", ["reg_code"], name: "index_bank_regions_on_reg_code", unique: true
15
24
 
16
25
  create_table "banks", force: true do |t|
17
26
  t.datetime "created_at"
@@ -35,4 +44,8 @@ ActiveRecord::Schema.define(version: 20140310145403) do
35
44
  t.string "ust_money"
36
45
  end
37
46
 
47
+ add_index "banks", ["bic"], name: "index_banks_on_bic"
48
+ add_index "banks", ["internal_code"], name: "index_banks_on_internal_code"
49
+ add_index "banks", ["reg_code"], name: "index_banks_on_reg_code"
50
+
38
51
  end
Binary file
@@ -8910,3 +8910,165 @@ Migrating to ChangeUstMoneyDatatype (20140310145403)
8910
8910
   (0.1ms) begin transaction
8911
8911
  SQL (0.4ms) INSERT INTO "banks" ("created_at", "date_kgr_registration", "fact_adr", "internal_code", "licences", "org_full_name", "org_name", "org_status", "reg_code", "reg_number", "updated_at", "ust_money", "ustav_adr") VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) [["created_at", "2014-04-15 19:01:05.518560"], ["date_kgr_registration", "1990-12-12"], ["fact_adr", "103780, г. Москва, ул. Кузнецкий мост, 15"], ["internal_code", 350000012], ["licences", "--- []\n"], ["org_full_name", "Московский акционерный банк содействия предпринимательству (открытое акционерное общество)"], ["org_name", "МОСБИЗНЕСБАНК"], ["org_status", "ликвидирована"], ["reg_code", 16], ["reg_number", 999], ["updated_at", "2014-04-15 19:01:05.518560"], ["ust_money", "123000000"], ["ustav_adr", "103780, г. Москва, ул. Кузнецкий мост, 15"]]
8912
8912
   (1.7ms) commit transaction
8913
+ ActiveRecord::SchemaMigration Load (0.1ms) SELECT "schema_migrations".* FROM "schema_migrations"
8914
+ Migrating to CreateRegions (20140426210540)
8915
+  (0.1ms) begin transaction
8916
+  (0.4ms) CREATE TABLE "regions" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "reg_code" integer, "cname" varchar(255), "created_at" datetime, "updated_at" datetime) 
8917
+ SQL (2.6ms) INSERT INTO "schema_migrations" ("version") VALUES (?) [["version", "20140426210540"]]
8918
+  (0.4ms) commit transaction
8919
+ ActiveRecord::SchemaMigration Load (0.1ms) SELECT "schema_migrations".* FROM "schema_migrations"
8920
+ ActiveRecord::SchemaMigration Load (0.1ms) SELECT "schema_migrations".* FROM "schema_migrations"
8921
+ Migrating to AddIndexes (20140426220130)
8922
+  (0.0ms) begin transaction
8923
+  (0.0ms) select sqlite_version(*)
8924
+  (0.3ms) CREATE INDEX "index_banks_on_reg_code" ON "banks" ("reg_code")
8925
+  (0.1ms)  SELECT sql
8926
+ FROM sqlite_master
8927
+ WHERE name='index_banks_on_reg_code' AND type='index'
8928
+ UNION ALL
8929
+ SELECT sql
8930
+ FROM sqlite_temp_master
8931
+ WHERE name='index_banks_on_reg_code' AND type='index'
8932
+ 
8933
+  (0.1ms) CREATE INDEX "index_banks_on_internal_code" ON "banks" ("internal_code")
8934
+  (0.1ms)  SELECT sql
8935
+ FROM sqlite_master
8936
+ WHERE name='index_banks_on_internal_code' AND type='index'
8937
+ UNION ALL
8938
+ SELECT sql
8939
+ FROM sqlite_temp_master
8940
+ WHERE name='index_banks_on_internal_code' AND type='index'
8941
+ 
8942
+  (0.0ms) SELECT sql
8943
+ FROM sqlite_master
8944
+ WHERE name='index_banks_on_reg_code' AND type='index'
8945
+ UNION ALL
8946
+ SELECT sql
8947
+ FROM sqlite_temp_master
8948
+ WHERE name='index_banks_on_reg_code' AND type='index'
8949
+
8950
+  (0.1ms) CREATE INDEX "index_banks_on_bic" ON "banks" ("bic")
8951
+  (0.1ms) CREATE UNIQUE INDEX "index_bank_regions_on_reg_code" ON "bank_regions" ("reg_code")
8952
+ SQLite3::SQLException: no such table: main.bank_regions: CREATE UNIQUE INDEX "index_bank_regions_on_reg_code" ON "bank_regions" ("reg_code")
8953
+  (0.2ms) rollback transaction
8954
+ ActiveRecord::SchemaMigration Load (0.1ms) SELECT "schema_migrations".* FROM "schema_migrations"
8955
+ ActiveRecord::SchemaMigration Load (0.1ms) SELECT "schema_migrations".* FROM "schema_migrations"
8956
+ Migrating to CreateRegions (20140426210540)
8957
+  (0.0ms) begin transaction
8958
+  (0.3ms) DROP TABLE "regions"
8959
+ SQL (2.4ms) DELETE FROM "schema_migrations" WHERE "schema_migrations"."version" = '20140426210540'
8960
+  (0.4ms) commit transaction
8961
+ ActiveRecord::SchemaMigration Load (0.1ms) SELECT "schema_migrations".* FROM "schema_migrations"
8962
+ ActiveRecord::SchemaMigration Load (0.1ms) SELECT "schema_migrations".* FROM "schema_migrations"
8963
+ Migrating to CreateRegions (20140426210540)
8964
+  (0.0ms) begin transaction
8965
+  (0.4ms) CREATE TABLE "bank_regions" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "reg_code" integer, "cname" varchar(255), "created_at" datetime, "updated_at" datetime) 
8966
+ SQL (1.1ms) INSERT INTO "schema_migrations" ("version") VALUES (?) [["version", "20140426210540"]]
8967
+  (0.5ms) commit transaction
8968
+ Migrating to AddIndexes (20140426220130)
8969
+  (0.0ms) begin transaction
8970
+  (0.0ms) select sqlite_version(*)
8971
+  (0.2ms) CREATE INDEX "index_banks_on_reg_code" ON "banks" ("reg_code")
8972
+  (0.1ms)  SELECT sql
8973
+ FROM sqlite_master
8974
+ WHERE name='index_banks_on_reg_code' AND type='index'
8975
+ UNION ALL
8976
+ SELECT sql
8977
+ FROM sqlite_temp_master
8978
+ WHERE name='index_banks_on_reg_code' AND type='index'
8979
+ 
8980
+  (0.1ms) CREATE INDEX "index_banks_on_internal_code" ON "banks" ("internal_code")
8981
+  (0.0ms)  SELECT sql
8982
+ FROM sqlite_master
8983
+ WHERE name='index_banks_on_internal_code' AND type='index'
8984
+ UNION ALL
8985
+ SELECT sql
8986
+ FROM sqlite_temp_master
8987
+ WHERE name='index_banks_on_internal_code' AND type='index'
8988
+ 
8989
+  (0.0ms) SELECT sql
8990
+ FROM sqlite_master
8991
+ WHERE name='index_banks_on_reg_code' AND type='index'
8992
+ UNION ALL
8993
+ SELECT sql
8994
+ FROM sqlite_temp_master
8995
+ WHERE name='index_banks_on_reg_code' AND type='index'
8996
+
8997
+  (0.1ms) CREATE INDEX "index_banks_on_bic" ON "banks" ("bic")
8998
+  (0.6ms) CREATE UNIQUE INDEX "index_bank_regions_on_reg_code" ON "bank_regions" ("reg_code")
8999
+ SQL (0.1ms) INSERT INTO "schema_migrations" ("version") VALUES (?) [["version", "20140426220130"]]
9000
+  (7.4ms) commit transaction
9001
+ ActiveRecord::SchemaMigration Load (0.1ms) SELECT "schema_migrations".* FROM "schema_migrations"
9002
+  (0.1ms) SELECT sql
9003
+ FROM sqlite_master
9004
+ WHERE name='index_bank_regions_on_reg_code' AND type='index'
9005
+ UNION ALL
9006
+ SELECT sql
9007
+ FROM sqlite_temp_master
9008
+ WHERE name='index_bank_regions_on_reg_code' AND type='index'
9009
+
9010
+  (0.1ms)  SELECT sql
9011
+ FROM sqlite_master
9012
+ WHERE name='index_banks_on_bic' AND type='index'
9013
+ UNION ALL
9014
+ SELECT sql
9015
+ FROM sqlite_temp_master
9016
+ WHERE name='index_banks_on_bic' AND type='index'
9017
+ 
9018
+  (0.1ms) SELECT sql
9019
+ FROM sqlite_master
9020
+ WHERE name='index_banks_on_internal_code' AND type='index'
9021
+ UNION ALL
9022
+ SELECT sql
9023
+ FROM sqlite_temp_master
9024
+ WHERE name='index_banks_on_internal_code' AND type='index'
9025
+
9026
+  (0.1ms)  SELECT sql
9027
+ FROM sqlite_master
9028
+ WHERE name='index_banks_on_reg_code' AND type='index'
9029
+ UNION ALL
9030
+ SELECT sql
9031
+ FROM sqlite_temp_master
9032
+ WHERE name='index_banks_on_reg_code' AND type='index'
9033
+ 
9034
+  (0.7ms) CREATE TABLE "bank_regions" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "reg_code" integer, "cname" varchar(255), "created_at" datetime, "updated_at" datetime) 
9035
+  (0.2ms) select sqlite_version(*)
9036
+  (0.7ms) CREATE UNIQUE INDEX "index_bank_regions_on_reg_code" ON "bank_regions" ("reg_code")
9037
+  (0.5ms) CREATE TABLE "banks" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "created_at" datetime, "updated_at" datetime, "reg_number" integer, "internal_code" integer, "bic" varchar(255), "org_name" varchar(255), "org_full_name" varchar(255), "phones" varchar(255), "date_kgr_registration" date, "main_reg_number" varchar(255), "main_date_reg" date, "ustav_adr" varchar(255), "fact_adr" varchar(255), "director" varchar(255), "org_status" varchar(255), "reg_code" integer, "ssv_date" date, "licences" text, "ust_money" varchar(255))
9038
+  (0.5ms) CREATE INDEX "index_banks_on_bic" ON "banks" ("bic")
9039
+  (0.1ms) SELECT sql
9040
+ FROM sqlite_master
9041
+ WHERE name='index_banks_on_bic' AND type='index'
9042
+ UNION ALL
9043
+ SELECT sql
9044
+ FROM sqlite_temp_master
9045
+ WHERE name='index_banks_on_bic' AND type='index'
9046
+
9047
+  (0.5ms) CREATE INDEX "index_banks_on_internal_code" ON "banks" ("internal_code")
9048
+  (0.1ms) SELECT sql
9049
+ FROM sqlite_master
9050
+ WHERE name='index_banks_on_internal_code' AND type='index'
9051
+ UNION ALL
9052
+ SELECT sql
9053
+ FROM sqlite_temp_master
9054
+ WHERE name='index_banks_on_internal_code' AND type='index'
9055
+
9056
+  (0.1ms)  SELECT sql
9057
+ FROM sqlite_master
9058
+ WHERE name='index_banks_on_bic' AND type='index'
9059
+ UNION ALL
9060
+ SELECT sql
9061
+ FROM sqlite_temp_master
9062
+ WHERE name='index_banks_on_bic' AND type='index'
9063
+ 
9064
+  (0.5ms) CREATE INDEX "index_banks_on_reg_code" ON "banks" ("reg_code")
9065
+  (0.6ms) CREATE TABLE "schema_migrations" ("version" varchar(255) NOT NULL) 
9066
+  (0.4ms) CREATE UNIQUE INDEX "unique_schema_migrations" ON "schema_migrations" ("version")
9067
+  (0.1ms) SELECT version FROM "schema_migrations"
9068
+  (0.5ms) INSERT INTO "schema_migrations" (version) VALUES ('20140426220130')
9069
+  (0.5ms) INSERT INTO "schema_migrations" (version) VALUES ('20140126153450')
9070
+  (0.5ms) INSERT INTO "schema_migrations" (version) VALUES ('20140126171627')
9071
+  (0.5ms) INSERT INTO "schema_migrations" (version) VALUES ('20140208103744')
9072
+  (0.5ms) INSERT INTO "schema_migrations" (version) VALUES ('20140208123404')
9073
+  (0.4ms) INSERT INTO "schema_migrations" (version) VALUES ('20140310145403')
9074
+  (0.4ms) INSERT INTO "schema_migrations" (version) VALUES ('20140426210540')