validates_russian 0.0.5 → 0.0.6

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ee7c009be5b8e81ccbb4081ca49a4f37b3ed0bfa
4
- data.tar.gz: 2a9f183c335bd7eb0709794332417a1d3d55efa5
3
+ metadata.gz: 2a9a6630d0d107ba996e35406d6e003de4c597c5
4
+ data.tar.gz: 72a174080a59d75f87e8fb108b976d05fa242d7a
5
5
  SHA512:
6
- metadata.gz: df80c2215dd8db4e37184336bd1376138b8d720c57e2a509835663e97bc44fcc8e3338373ddb7335598b997f89b9537424d5154dc6db7056b0bf2aece6f30634
7
- data.tar.gz: 26ab5f70a442599280f2d9569bed082357a5635ab9244f339cb4b887db29263063c29edb06f33a3f6e650ef13c7bfced3636995389050b58046d9e1498768646
6
+ metadata.gz: bc04c67c11c4a8dc19578dcb604fc527042538e1bc92ad5ea26188e6b93d80d505525fb167279a9fe7f011e18501cfd08b6bcd2ff3c4c59515b09779a2aaafe8
7
+ data.tar.gz: 310ca0b03a83734c11944762c0a81ae1342769db515b6f4563d17000ae0cf4309a9af2cb099dfec0015a66240ed3c8e31227d35cd5f6516a96c2e6ab83f2764a
data/CHANGELOG.md CHANGED
@@ -1,3 +1,13 @@
1
+ ### 0.0.6
2
+
3
+ * PassportFormatValidator
4
+ * OkatoFormatValidator
5
+ * SnilsFormatValidator
6
+
7
+ ### 0.0.5
8
+
9
+ * Added OgrnValidator
10
+
1
11
  ### 0.0.4
2
12
 
3
13
  * Added OkpoFormatValidator
data/README.md CHANGED
@@ -14,9 +14,9 @@
14
14
  * [ОГРН](http://ru.wikipedia.org/wiki/Основной_государственный_регистрационный_номер) (OgrnFormatValidator)
15
15
  * [Корреспондентский счёт] (http://ru.wikipedia.org/wiki/Корреспондентский_счёт) (KsFormatValidator)
16
16
  * [Рассчётный счёт] (http://ru.wikipedia.org/wiki/Расчётный_счёт) (RsFormatValidator)
17
- * ОКАТО (TODO v0.0.6)
18
- * СНИЛС (TODO v0.0.6)
19
- * Значение паспорта (TODO v0.0.6)
17
+ * [OKATO](http://ru.wikipedia.org/wiki/Общероссийский_классификатор_объектов_административно-территориального_деления) (OkatoFormatValidator)
18
+ * [СНИЛС](http://ru.wikipedia.org/wiki/Страховой_номер_индивидуального_лицевого_счёта) (SnilsFormatValidator)
19
+ * [Значение паспорта](http://ru.wikipedia.org/wiki/Паспорт_гражданина_Российской_Федерации) (PassportFormatValidator)
20
20
 
21
21
  ## Установка
22
22
 
@@ -9,11 +9,13 @@ Russian specific values validation:
9
9
 
10
10
  * [INN](http://ru.wikipedia.org/wiki/Идентификационный_номер_налогоплательщика) (InnFormatValidator) Russian analogue of VAT identification number
11
11
  * [OKPO](http://ru.wikipedia.org/wiki/Общероссийский_классификатор_предприятий_и_организаций) (OkpoFormatValidator) Legal code
12
- * OKATO (TODO)
13
12
  * [KPP](http://ru.wikipedia.org/wiki/Код_причины_постановки_на_учёт) (KppFormatValidator) Code of reason for registration
14
13
  * [OGRN](http://ru.wikipedia.org/wiki/Основной_государственный_регистрационный_номер) (OgrnFormatValidator) Main state registration number
15
14
  * [Correspondent Account Value] (http://ru.wikipedia.org/wiki/Корреспондентский_счёт) (KsFormatValidator)
16
15
  * [Bank Account Value] (http://ru.wikipedia.org/wiki/Расчётный_счёт) (RsFormatValidator)
16
+ * [OKATO](http://ru.wikipedia.org/wiki/Общероссийский_классификатор_объектов_административно-территориального_деления) (OkatoFormatValidator)
17
+ * [SNILS](http://ru.wikipedia.org/wiki/Страховой_номер_индивидуального_лицевого_счёта) (SnilsFormatValidator)
18
+ * [Passport Value](http://ru.wikipedia.org/wiki/Паспорт_гражданина_Российской_Федерации) (PassportFormatValidator)
17
19
 
18
20
  ## Installation
19
21
 
@@ -0,0 +1,3 @@
1
+ module ValidatesRussian
2
+ OKATO_REGION_NUMBERS = %w{79 84 80 81 82 26 83 85 91 86 87 88 89 98 90 92 93 94 95 96 97 01 03 04 05 07 08 11 12 14 15 17 19 20 24 25 27 29 20 32 33 34 37 38 41 42 44 46 47 22 49 50 52 53 54 56 57 58 60 61 36 63 64 65 66 68 28 69 73 75 76 78 45 40 99 43 48 51 55 59 62 67 77 72 74}
3
+ end
@@ -1,3 +1,3 @@
1
1
  module ValidatesRussian
2
- VERSION = '0.0.5'
2
+ VERSION = '0.0.6'
3
3
  end
@@ -0,0 +1,20 @@
1
+ class OkatoFormatValidator < ValidatesRussian::Validator
2
+ validates_using do |okato|
3
+ next false unless okato =~ /^\d+$/
4
+
5
+ okato = okato.split(//).map(&:to_i)
6
+
7
+ next false unless [3, 6, 9].include?(okato.size)
8
+ next false unless calc(okato) == okato.last
9
+ end
10
+
11
+ private
12
+
13
+ def self.calc(okato)
14
+ [1, 3].each do |i|
15
+ code = okato[0..-2].each_with_index.inject(0){ |s, p| s + p[0] * (p[1] + i) } % 11
16
+ return code if code < 10
17
+ end
18
+ 0
19
+ end
20
+ end
@@ -0,0 +1,8 @@
1
+ class PassportFormatValidator < ValidatesRussian::Validator
2
+ # see format here: http://ru.wikipedia.org/wiki/Паспорт_гражданина_Российской_Федерации
3
+ validates_using do |passport|
4
+ next false unless passport =~ /^\d+$/
5
+ next false unless ValidatesRussian::OKATO_REGION_NUMBERS.include?(passport[0..1])
6
+ next false unless passport.size == 10
7
+ end
8
+ end
@@ -0,0 +1,20 @@
1
+ class SnilsFormatValidator < ValidatesRussian::Validator
2
+ validates_using do |snils|
3
+ next false unless snils =~ /^\d+$/
4
+
5
+ case snils.size
6
+ when 11 then next false unless calc(snils) == snils[-2..-1]
7
+ when 9 then next false unless snils.to_i <= 1001998
8
+ else next false
9
+ end
10
+ end
11
+
12
+ private
13
+
14
+ def self.calc(snils)
15
+ snils = snils.split(//).map(&:to_i)
16
+ code = snils[0..-3].each_with_index
17
+ .inject(0){ |s, p| s + p[0] * (9 - p[1]) } % 101 % 100
18
+ code = (code < 10 ? code = '0' + code.to_s : code.to_s)
19
+ end
20
+ end
@@ -13,6 +13,7 @@ describe InnFormatValidator do
13
13
  470313747100
14
14
  471900124013
15
15
  503102384852
16
+ 0274062111
16
17
  7706633181
17
18
  7715805253
18
19
  7714698320
@@ -0,0 +1,38 @@
1
+ require 'spec_helper'
2
+
3
+ describe OkatoFormatValidator do
4
+ before(:each) do
5
+ TestModel.reset_callbacks(:validate)
6
+ TestModel.validates(:field, okato_format: true)
7
+ end
8
+
9
+ it 'should be valid for valid values' do
10
+ valid_okatos = %w{
11
+ 794038
12
+ 457892
13
+ 729267
14
+ 729255
15
+ }
16
+
17
+ valid_okatos.each do |okato|
18
+ model = TestModel.new
19
+ model.field = okato
20
+ model.should be_valid
21
+ end
22
+ end
23
+
24
+ it 'should not be valid for invalid values' do
25
+ invalid_okatos = %w{
26
+ 794033
27
+ 794032
28
+ 77150100
29
+ 78fffffff
30
+ }.push('', ' ', nil, [], {})
31
+
32
+ invalid_okatos.each do |okato|
33
+ model = TestModel.new
34
+ model.field = okato
35
+ model.should_not be_valid
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,38 @@
1
+ require 'spec_helper'
2
+
3
+ describe PassportFormatValidator do
4
+ before(:each) do
5
+ TestModel.reset_callbacks(:validate)
6
+ TestModel.validates(:field, passport_format: true)
7
+ end
8
+
9
+ it 'should be valid for valid values' do
10
+ valid_passports = %w{
11
+ 6184729864
12
+ 4023841230
13
+ 0110019981
14
+ 5710019971
15
+ }
16
+
17
+ valid_passports.each do |passport|
18
+ model = TestModel.new
19
+ model.field = passport
20
+ model.should be_valid
21
+ end
22
+ end
23
+
24
+ it 'should not be valid for invalid values' do
25
+ invalid_passports = %w{
26
+ 1
27
+ 231
28
+ 77150100
29
+ 78fffffff
30
+ }.push('', ' ', nil, [], {})
31
+
32
+ invalid_passports.each do |passport|
33
+ model = TestModel.new
34
+ model.field = passport
35
+ model.should_not be_valid
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,39 @@
1
+ require 'spec_helper'
2
+
3
+ describe SnilsFormatValidator do
4
+ before(:each) do
5
+ TestModel.reset_callbacks(:validate)
6
+ TestModel.validates(:field, snils_format: true)
7
+ end
8
+
9
+ it 'should be valid for valid values' do
10
+ valid_snilses = %w{
11
+ 11223344595
12
+ 67238412306
13
+ 001001998
14
+ 001001997
15
+ }
16
+
17
+ valid_snilses.each do |snils|
18
+ model = TestModel.new
19
+ model.field = snils
20
+ model.should be_valid
21
+ end
22
+ end
23
+
24
+ it 'should not be valid for invalid values' do
25
+ invalid_snilses = %w{
26
+ 77150100
27
+ 67237412306
28
+ 67238412307
29
+ 11223344594
30
+ 78fffffff
31
+ }.push('', ' ', nil, [], {})
32
+
33
+ invalid_snilses.each do |snils|
34
+ model = TestModel.new
35
+ model.field = snils
36
+ model.should_not be_valid
37
+ end
38
+ end
39
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: validates_russian
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alex Antonov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-01-22 00:00:00.000000000 Z
11
+ date: 2014-02-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel
@@ -84,6 +84,7 @@ files:
84
84
  - gemfiles/Gemfile.activemodel-3.0
85
85
  - gemfiles/Gemfile.activemodel-4.0
86
86
  - lib/validates_russian.rb
87
+ - lib/validates_russian/okato_region_numbers.rb
87
88
  - lib/validates_russian/okv.rb
88
89
  - lib/validates_russian/region_numbers.rb
89
90
  - lib/validates_russian/validator.rb
@@ -92,16 +93,22 @@ files:
92
93
  - lib/validators/kpp_format_validator.rb
93
94
  - lib/validators/ks_format_validator.rb
94
95
  - lib/validators/ogrn_format_validator.rb
96
+ - lib/validators/okato_format_validator.rb
95
97
  - lib/validators/okpo_format_validator.rb
98
+ - lib/validators/passport_format_validator.rb
96
99
  - lib/validators/rs_format_validator.rb
100
+ - lib/validators/snils_format_validator.rb
97
101
  - spec/spec_helper.rb
98
102
  - spec/support/test_model.rb
99
103
  - spec/validators/inn_format_validator_spec.rb
100
104
  - spec/validators/kpp_format_validator_spec.rb
101
105
  - spec/validators/ks_format_validator_spec.rb
102
106
  - spec/validators/ogrn_format_validator_spec.rb
107
+ - spec/validators/okato_format_validator_spec.rb
103
108
  - spec/validators/okpo_format_validator_spec.rb
109
+ - spec/validators/passport_format_validator_spec.rb
104
110
  - spec/validators/rs_format_validator_spec.rb
111
+ - spec/validators/snils_format_validator_spec.rb
105
112
  - validates_russian.gemspec
106
113
  homepage: http://github.com/asiniy/validates_russian
107
114
  licenses:
@@ -134,5 +141,8 @@ test_files:
134
141
  - spec/validators/kpp_format_validator_spec.rb
135
142
  - spec/validators/ks_format_validator_spec.rb
136
143
  - spec/validators/ogrn_format_validator_spec.rb
144
+ - spec/validators/okato_format_validator_spec.rb
137
145
  - spec/validators/okpo_format_validator_spec.rb
146
+ - spec/validators/passport_format_validator_spec.rb
138
147
  - spec/validators/rs_format_validator_spec.rb
148
+ - spec/validators/snils_format_validator_spec.rb