validates_russian 0.0.5 → 0.0.6

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: 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