rus_bank_rails 1.4.4 → 1.5.1

Sign up to get free protection for your applications and to get access to all the features.
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')