faker-russian 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c75ff98fcf23e6ff7fc3cff318b5e3f917625140
4
- data.tar.gz: 54c4850dc5dbabe72010989099dc61cc4a74442f
3
+ metadata.gz: 13effb3bee907fce3e3f2eacfa191c4605194bf0
4
+ data.tar.gz: 4ab47b15a8dfb24c32e6e77d6c2f36b6092753b8
5
5
  SHA512:
6
- metadata.gz: ef843251ab1698458ae897c03db5cc12cc43fbb401f6de4d97f8f5ba57c6eaa00ede94377ee12428aaf116b9bb0e05ee10c9715c0c45eee8c84f66f6840353f2
7
- data.tar.gz: 95d78319cf1e70befc018d76ef0ed872497bde0ce2147162893223c1e380891754535e225fb48cbac12f6361e3c8d4d377b10e82ba93be4c1508f34dcd2a7b27
6
+ metadata.gz: a67c45ad8fe641a491eeb9a17b4b3055719009fa39436f9c9cf7775d25f643a942a9126d11428f3574cdd3cb018a02d88a772aa1f66cb9d090e19c45fd81b57c
7
+ data.tar.gz: 24819bb70fa43a51a8e6169f19959bd40606a40dce0ca11d9253f242aa5c8ba0262553d6d84dda1e544548115b0c300c214df8585ef770342d09939dda8a5535
data/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ # 0.0.5
2
+
3
+ * Rs faker added
4
+ * Ks faker added
5
+
1
6
  # 0.0.4
2
7
 
3
8
  * Bik faker added
data/README.md CHANGED
@@ -13,10 +13,10 @@
13
13
  * [ОКПО](http://ru.wikipedia.org/wiki/Общероссийский_классификатор_предприятий_и_организаций) (Faker::Russian.okpo)
14
14
  * [КПП](http://ru.wikipedia.org/wiki/Код_причины_постановки_на_учёт) (Faker::Russian.kpp)
15
15
  * (TODO) [ОГРН](http://ru.wikipedia.org/wiki/Основной_государственный_регистрационный_номер) (Faker::Russian.ogrn)
16
- * (TODO) [Корреспондентский счёт] (http://ru.wikipedia.org/wiki/Корреспондентский_счёт) (Faker::Russian.ks)
17
- * (TODO) [Рассчётный счёт] (http://ru.wikipedia.org/wiki/Расчётный_счёт) (Faker::Russian.rs)
16
+ * [Корреспондентский счёт] (http://ru.wikipedia.org/wiki/Корреспондентский_счёт) (Faker::Russian.correspondent_account)
17
+ * [Расчётный счёт] (http://ru.wikipedia.org/wiki/Расчётный_счёт) (Faker::Russian.rs)
18
18
  * [OKATO](http://ru.wikipedia.org/wiki/Общероссийский_классификатор_объектов_административно-территориального_деления) (Faker::Russian.okato)
19
- * (TODO) [СНИЛС](http://ru.wikipedia.org/wiki/Страховой_номер_индивидуального_лицевого_счёта) (Faker::Russian.snils)
19
+ * [СНИЛС](http://ru.wikipedia.org/wiki/Страховой_номер_индивидуального_лицевого_счёта) (Faker::Russian.snils)
20
20
  * (TODO) [Значение паспорта](http://ru.wikipedia.org/wiki/Паспорт_гражданина_Российской_Федерации) (Faker::Russian.passport)
21
21
 
22
22
  Для проверки сгенерированных значений можешь использовать [gem 'validates_russian'](https://github.com/asiniy/validates_russian)
@@ -108,6 +108,48 @@
108
108
  Faker::Russian.kpp(sequence_number: 1) # => '381201001'
109
109
  ```
110
110
 
111
+ ### Корреспондентский счёт
112
+
113
+ Генерируется корреспондентский счет
114
+
115
+ ```ruby
116
+ Faker::Russian.correspondent_account
117
+ ```
118
+
119
+ Также можно использовать последовательности (не более 1 000 000 000):
120
+
121
+ ``` ruby
122
+ Faker::Russian.correspondent_account(sequence_number: 1) # => '30100000000717354021'
123
+ Faker::Russian.correspondent_account(sequence_number: 1) # => '30100000000717354021'
124
+ ```
125
+
126
+ Можно указать БИК для которого генерируется счет:
127
+
128
+ ```ruby
129
+ Faker::Russian.correspondent_account(bik: '0440754281') # => '30100000341569331281'
130
+ ```
131
+
132
+ ### Расчетный счет
133
+
134
+ Генерирует Расчетный счет со случайным номером ОКВ
135
+
136
+ ``` ruby
137
+ Faker::Russian.rs # => '88638068000072709375'
138
+ ```
139
+
140
+ Можно указать ОКВ
141
+
142
+ ``` ruby
143
+ Faker::Russian.rs(okv: 810) # => '86815810000597174799'
144
+ ```
145
+
146
+ Также можно использовать последовательности (не более 1 000 000 000):
147
+
148
+ ``` ruby
149
+ Faker::Russian.rs(sequence_number: 1) # => '98539706000946286476'
150
+ Faker::Russian.rs(sequence_number: 1) # => '98539706000946286476'
151
+ ```
152
+
111
153
  ### ОКАТО
112
154
 
113
155
  Генерирует ОКАТО со случайным номером региона и случайной длиной
@@ -137,6 +179,21 @@
137
179
  Faker::Russian.okato(sequence_number: 1) # => '517'
138
180
  ```
139
181
 
182
+ ### СНИЛС
183
+
184
+ Генерирует 11-ти значный СНИЛС
185
+
186
+ ``` ruby
187
+ Faker::Russian.snils # => '15200583517'
188
+ ```
189
+
190
+ Также можно использовать последовательности:
191
+
192
+ ``` ruby
193
+ Faker::Russian.snils(sequence_number: 1) # => '71735402183'
194
+ Faker::Russian.snils(sequence_number: 1) # => '71735402183'
195
+ ```
196
+
140
197
  ## Инструкции разработчикам
141
198
 
142
199
  Читай [CONTRIBUTING.md](CONTRIBUTING.md)
data/lib/faker/russian.rb CHANGED
@@ -11,5 +11,8 @@ module Faker
11
11
  extend Kpp
12
12
  extend Okato
13
13
  extend Okpo
14
+ extend Snils
15
+ extend CorrespondentAccount
16
+ extend Rs
14
17
  end
15
18
  end
@@ -5,7 +5,7 @@ module Faker
5
5
  options.assert_valid_keys(:sequence_number, :okato_region_number)
6
6
 
7
7
  sequence = find_sequence(options[:sequence_number])
8
- okato_region_number = find_okato_region_number(options[:okato_region_number], sequence)
8
+ okato_region_number = find_region_number(options[:okato_region_number], sequence, :okato_region_numbers)
9
9
 
10
10
  '04' + okato_region_number + sprintf("%06d", sequence.rand(1_000_000))
11
11
  end
@@ -3,8 +3,12 @@ module Faker
3
3
  module Constants
4
4
  REGION_NUMBERS = %w{01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 83 86 87 89}
5
5
 
6
- def find_region_number(number = nil, sequence)
7
- region_numbers = Faker::Russian::Constants::REGION_NUMBERS
6
+ OKATO_REGION_NUMBERS = %w{01 03 04 05 07 08 11 12 14 15 17 19 20 22 24 25 26 27 28 29 32 33 34 36 37 38 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99}
7
+
8
+ OKV = %w{388 728 156 230 132 144 756 752 152 203 191 238 826 654 646 953 952 950 174 262 348 608 940 858 860 478 800 949 788 496 398 834 882 050 968 938 972 706 417 760 702 941 690 408 960 682 222 710 462 360 643 116 072 446 586 776 512 578 934 901 604 946 376 554 532 524 064 232 566 498 943 484 504 458 969 480 426 440 748 434 422 430 694 340 008 428 981 104 414 192 188 976 931 977 170 418 598 320 404 454 973 634 124 886 352 364 368 400 356 392 558 985 967 970 818 978 704 214 242 780 840 090 136 516 932 678 784 807 208 270 332 600 980 344 292 324 936 328 951 410 548 108 096 986 068 937 975 060 974 084 048 764 052 590 044 971 533 051 032 012 944 036 810}.freeze
9
+
10
+ def find_region_number(number = nil, sequence, region_number_type)
11
+ region_numbers = Faker::Russian::Constants.const_get(region_number_type.to_s.upcase)
8
12
 
9
13
  if number.present?
10
14
  raise('there is no region with that number!') unless region_numbers.include?(number.to_s)
@@ -14,19 +18,14 @@ module Faker
14
18
  end
15
19
  end
16
20
 
17
- OKATO_REGION_NUMBERS = %w{01 03 04 05 07 08 11 12 14 15 17 19 20 22 24 25 26 27 28 29 32 33 34 36 37 38 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99}
18
-
19
- def find_okato_region_number(number = nil, sequence)
20
- region_numbers = Faker::Russian::Constants::OKATO_REGION_NUMBERS
21
-
22
- if number.present?
23
- raise('there is no okato region with that number!') unless region_numbers.include?(number.to_s)
24
- number.to_s
21
+ def find_okv(okv = nil, sequence)
22
+ if okv && okv.to_s.length > 0
23
+ raise ArgumentError.new("There is no OKV \"%s\"" % okv.to_s) unless OKV.include?(okv.to_s)
24
+ okv.to_s
25
25
  else
26
- region_numbers[sequence.rand(region_numbers.size)]
26
+ OKV[sequence.rand(OKV.size)]
27
27
  end
28
28
  end
29
-
30
29
  end
31
30
  end
32
31
  end
@@ -0,0 +1,24 @@
1
+ module Faker
2
+ module Russian
3
+ module CorrespondentAccount
4
+ def correspondent_account(options = {})
5
+ options.assert_valid_keys(:sequence_number, :bik)
6
+
7
+ sequence = find_sequence(options[:sequence_number])
8
+ member_number = find_member_number(options[:bik], sequence)
9
+
10
+ '301' + sprintf("%014d", sequence.rand(1_000_000_000)) + member_number
11
+ end
12
+
13
+ private
14
+
15
+ def find_member_number(bik, sequence)
16
+ if bik && bik.length > 3
17
+ bik[-3..-1]
18
+ else
19
+ "%03d" % sequence.rand(1_000)
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -5,7 +5,7 @@ module Faker
5
5
  options.assert_valid_keys(:sequence_number, :region_number, :kind)
6
6
 
7
7
  sequence = find_sequence(options[:sequence_number])
8
- region_number = find_region_number(options[:region_number], sequence)
8
+ region_number = find_region_number(options[:region_number], sequence, :region_numbers)
9
9
  kind = find_kind(options[:kind], sequence)
10
10
  sequence_digits = find_digits(kind, sequence)
11
11
 
@@ -5,7 +5,7 @@ module Faker
5
5
  options.assert_valid_keys(:sequence_number, :region_number)
6
6
 
7
7
  sequence = find_sequence(options[:sequence_number])
8
- region_number = find_region_number(options[:region_number], sequence)
8
+ region_number = find_region_number(options[:region_number], sequence, :region_numbers)
9
9
 
10
10
  region_number + two_region_numbers(sequence) + '01001'
11
11
  end
@@ -5,7 +5,7 @@ module Faker
5
5
  options.assert_valid_keys(:sequence_number, :okato_region_number, :length)
6
6
 
7
7
  sequence = find_sequence(options[:sequence_number])
8
- okato_region_number = find_okato_region_number(options[:okato_region_number], sequence)
8
+ okato_region_number = find_region_number(options[:okato_region_number], sequence, :okato_region_numbers)
9
9
  okato_without_calc = okato_region_number + find_length_digits(options[:length], sequence)
10
10
  okato_without_calc + calc_okato(okato_without_calc)
11
11
  end
@@ -0,0 +1,14 @@
1
+ module Faker
2
+ module Russian
3
+ module Rs
4
+ def rs(options = {})
5
+ options.assert_valid_keys(:sequence_number, :okv)
6
+
7
+ sequence = find_sequence(options[:sequence_number])
8
+ okv_digits = find_okv(options[:okv], sequence)
9
+
10
+ ('%05d' % sequence.rand(100_000)) + okv_digits + ('%012d' % sequence.rand(1_000_000_000))
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,24 @@
1
+ module Faker
2
+ module Russian
3
+ module Snils
4
+ def snils(options = {})
5
+ options.assert_valid_keys(:sequence_number)
6
+
7
+ sequence = find_sequence(options[:sequence_number])
8
+ snils_digits = '%09d' % sequence.rand(1_000_000_000)
9
+
10
+ snils_digits + check_digits(snils_digits)
11
+ end
12
+
13
+ private
14
+
15
+ def check_digits(snils_digits)
16
+ digits = snils_digits.split('').map(&:to_i)
17
+ checksum = digits.each_with_index.inject(0) do |sum, (digit, index)|
18
+ sum + digit * (9 - index)
19
+ end % 101 % 100
20
+ '%02d' % checksum
21
+ end
22
+ end
23
+ end
24
+ end
@@ -1,7 +1,7 @@
1
1
  module Faker
2
2
  module Russian
3
3
  module Version
4
- VERSION = '0.0.4'
4
+ VERSION = '0.0.5'
5
5
 
6
6
  def version
7
7
  VERSION
@@ -0,0 +1,45 @@
1
+ require 'spec_helper'
2
+
3
+ describe Faker::Russian do
4
+ describe '#correspondent_account' do
5
+ let(:bik) { Faker::Russian.bik }
6
+
7
+ before(:all) do
8
+ DummyModel.reset_callbacks(:validate)
9
+ DummyModel.validates(:field, ks_format: true)
10
+ end
11
+
12
+ it 'generate valid correspondent account without arguments' do
13
+ 100.times do
14
+ expect(DummyModel.new(field: Faker::Russian.correspondent_account)).to be_valid
15
+ end
16
+ end
17
+
18
+ it 'generate valid correspondent account with bik' do
19
+ 100.times do
20
+ expect(DummyModel.new(field: Faker::Russian.correspondent_account(bik: bik))).to be_valid
21
+ end
22
+ end
23
+
24
+ it 'generate correspondent account for given bik' do
25
+ 100.times do
26
+ expect(Faker::Russian.correspondent_account(bik: bik)[-3..-1]).to eq bik[-3..-1]
27
+ end
28
+ end
29
+
30
+ it 'generate difference correspondent account with sequence' do
31
+ sequenced_cas = 1000.times.map{ |n| Faker::Russian.correspondent_account(sequence_number: n) }
32
+ expect(sequenced_cas.size).to eq(sequenced_cas.uniq.size)
33
+ end
34
+
35
+ it 'generate same correspondent accounts for sequence' do
36
+ array1 = 1000.times.map{ |n| Faker::Russian.correspondent_account(sequence_number: n) }
37
+ array2 = 1000.times.map{ |n| Faker::Russian.correspondent_account(sequence_number: n) }
38
+ expect(array1).to eq(array2)
39
+ end
40
+
41
+ it 'permit just a few options' do
42
+ expect{ Faker::Russian.correspondent_account(shit: 'shit') }.to raise_error(ArgumentError)
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,47 @@
1
+ require 'spec_helper'
2
+
3
+ describe Faker::Russian do
4
+ describe '#rs' do
5
+ let(:okv) { 810 }
6
+
7
+ before(:all) do
8
+ DummyModel.reset_callbacks(:validate)
9
+ DummyModel.validates(:field, rs_format: true)
10
+ end
11
+
12
+ it 'generate valid rs without arguments' do
13
+ 100.times do
14
+ expect(DummyModel.new(field: Faker::Russian.rs)).to be_valid
15
+ end
16
+ end
17
+
18
+ it 'generate rs with given okv number' do
19
+ expect(Faker::Russian.rs(okv: okv)[5..7]).to eq okv.to_s
20
+ end
21
+
22
+ it 'generate valid rs with okv number' do
23
+ 100.times do
24
+ expect(DummyModel.new(field: Faker::Russian.rs(okv: okv))).to be_valid
25
+ end
26
+ end
27
+
28
+ it 'raises error if given okv number is invalid' do
29
+ expect{ Faker::Russian.rs(okv: '001') }.to raise_error(ArgumentError)
30
+ end
31
+
32
+ it 'generate difference rs with sequence' do
33
+ sequenced_rs = 1000.times.map{ |n| Faker::Russian.rs(sequence_number: n) }
34
+ expect(sequenced_rs.size).to eq(sequenced_rs.uniq.size)
35
+ end
36
+
37
+ it 'generate same rs for sequence' do
38
+ array1 = 1000.times.map{ |n| Faker::Russian.rs(sequence_number: n) }
39
+ array2 = 1000.times.map{ |n| Faker::Russian.rs(sequence_number: n) }
40
+ expect(array1).to eq(array2)
41
+ end
42
+
43
+ it 'permit just a few options' do
44
+ expect{ Faker::Russian.rs(shit: 'shit') }.to raise_error(ArgumentError)
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,31 @@
1
+ require 'spec_helper'
2
+
3
+ describe Faker::Russian do
4
+ describe '#snils' do
5
+ before(:all) do
6
+ DummyModel.reset_callbacks(:validate)
7
+ DummyModel.validates(:field, snils_format: true)
8
+ end
9
+
10
+ it 'generate valid snils without arguments' do
11
+ 100.times do
12
+ expect(DummyModel.new(field: Faker::Russian.snils)).to be_valid
13
+ end
14
+ end
15
+
16
+ it 'generate difference snils with sequence' do
17
+ sequenced_snils = 1000.times.map{ |n| Faker::Russian.snils(sequence_number: n) }
18
+ expect(sequenced_snils.size).to eq(sequenced_snils.uniq.size)
19
+ end
20
+
21
+ it 'generate same snils for sequence' do
22
+ array1 = 1000.times.map{ |n| Faker::Russian.snils(sequence_number: n) }
23
+ array2 = 1000.times.map{ |n| Faker::Russian.snils(sequence_number: n) }
24
+ expect(array1).to eq(array2)
25
+ end
26
+
27
+ it 'permit just a few options' do
28
+ expect{ Faker::Russian.snils(shit: 'shit') }.to raise_error(ArgumentError)
29
+ end
30
+ end
31
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: faker-russian
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alex
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-07-21 00:00:00.000000000 Z
11
+ date: 2014-12-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -100,17 +100,23 @@ files:
100
100
  - lib/faker/russian.rb
101
101
  - lib/faker/russian/bik.rb
102
102
  - lib/faker/russian/constants.rb
103
+ - lib/faker/russian/correspondent_account.rb
103
104
  - lib/faker/russian/inn.rb
104
105
  - lib/faker/russian/kpp.rb
105
106
  - lib/faker/russian/okato.rb
106
107
  - lib/faker/russian/okpo.rb
108
+ - lib/faker/russian/rs.rb
107
109
  - lib/faker/russian/sequence.rb
110
+ - lib/faker/russian/snils.rb
108
111
  - lib/faker/russian/version.rb
109
112
  - spec/faker/russian/bik_spec.rb
113
+ - spec/faker/russian/correspondent_account_spec.rb
110
114
  - spec/faker/russian/inn_spec.rb
111
115
  - spec/faker/russian/kpp_spec.rb
112
116
  - spec/faker/russian/okato_spec.rb
113
117
  - spec/faker/russian/okpo_spec.rb
118
+ - spec/faker/russian/rs_spec.rb
119
+ - spec/faker/russian/snils_spec.rb
114
120
  - spec/spec_helper.rb
115
121
  - spec/support/dummy_model.rb
116
122
  homepage: http://github.com/asiniy/faker-russian
@@ -139,9 +145,12 @@ specification_version: 4
139
145
  summary: Faker russian specific values. INN, OGRN, et.c.
140
146
  test_files:
141
147
  - spec/faker/russian/bik_spec.rb
148
+ - spec/faker/russian/correspondent_account_spec.rb
142
149
  - spec/faker/russian/inn_spec.rb
143
150
  - spec/faker/russian/kpp_spec.rb
144
151
  - spec/faker/russian/okato_spec.rb
145
152
  - spec/faker/russian/okpo_spec.rb
153
+ - spec/faker/russian/rs_spec.rb
154
+ - spec/faker/russian/snils_spec.rb
146
155
  - spec/spec_helper.rb
147
156
  - spec/support/dummy_model.rb