nifval 0.2.1 → 0.2.2
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/Gemfile.lock +17 -8
- data/lib/nifval.rb +80 -34
- data/lib/nifval/version.rb +1 -1
- data/nifval.gemspec +1 -0
- data/spec/nifval_spec.rb +1 -1
- data/test_app/app/views/nifs/index.html.haml +2 -1
- metadata +76 -74
data/Gemfile.lock
CHANGED
@@ -1,21 +1,27 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
nifval (0.
|
4
|
+
nifval (0.2.2)
|
5
5
|
activemodel
|
6
6
|
i18n
|
7
7
|
|
8
8
|
GEM
|
9
9
|
remote: http://rubygems.org/
|
10
10
|
specs:
|
11
|
-
activemodel (3.
|
12
|
-
activesupport (= 3.
|
13
|
-
builder (~>
|
14
|
-
|
15
|
-
|
16
|
-
|
11
|
+
activemodel (3.2.8)
|
12
|
+
activesupport (= 3.2.8)
|
13
|
+
builder (~> 3.0.0)
|
14
|
+
activesupport (3.2.8)
|
15
|
+
i18n (~> 0.6)
|
16
|
+
multi_json (~> 1.0)
|
17
|
+
builder (3.0.3)
|
17
18
|
diff-lcs (1.1.2)
|
18
|
-
|
19
|
+
fuubar (1.0.0)
|
20
|
+
rspec (~> 2.0)
|
21
|
+
rspec-instafail (~> 0.2.0)
|
22
|
+
ruby-progressbar (~> 0.0.10)
|
23
|
+
i18n (0.6.1)
|
24
|
+
multi_json (1.3.6)
|
19
25
|
rspec (2.5.0)
|
20
26
|
rspec-core (~> 2.5.0)
|
21
27
|
rspec-expectations (~> 2.5.0)
|
@@ -23,11 +29,14 @@ GEM
|
|
23
29
|
rspec-core (2.5.1)
|
24
30
|
rspec-expectations (2.5.0)
|
25
31
|
diff-lcs (~> 1.1.2)
|
32
|
+
rspec-instafail (0.2.4)
|
26
33
|
rspec-mocks (2.5.0)
|
34
|
+
ruby-progressbar (0.0.10)
|
27
35
|
|
28
36
|
PLATFORMS
|
29
37
|
ruby
|
30
38
|
|
31
39
|
DEPENDENCIES
|
40
|
+
fuubar
|
32
41
|
nifval!
|
33
42
|
rspec (~> 2.5)
|
data/lib/nifval.rb
CHANGED
@@ -5,30 +5,86 @@ require "active_model"
|
|
5
5
|
module Nifval
|
6
6
|
class NifValidator < ActiveModel::EachValidator
|
7
7
|
def validate_each(record, attribute, value)
|
8
|
-
if !
|
8
|
+
if value.nil? || !Document.new(value).valid?
|
9
9
|
record.errors.add(attribute, I18n.t("nifval.wrong"))
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
13
13
|
private
|
14
14
|
|
15
|
-
|
16
|
-
|
17
|
-
|
15
|
+
class Document
|
16
|
+
attr_accessor :nif
|
17
|
+
def initialize(nif)
|
18
|
+
@nif = nif
|
18
19
|
|
19
|
-
|
20
|
-
|
21
|
-
|
20
|
+
setup
|
21
|
+
end
|
22
|
+
|
23
|
+
def valid?
|
24
|
+
case
|
25
|
+
when invalid_format? then false
|
26
|
+
when standard? then valid_standard?
|
27
|
+
when special? then valid_special?
|
28
|
+
when cif? then valid_cif?
|
29
|
+
when nie? then valid_nie?
|
30
|
+
else false
|
31
|
+
end
|
32
|
+
end
|
22
33
|
|
23
|
-
|
24
|
-
|
34
|
+
def setup
|
35
|
+
raise MissingNifException if nif.nil?
|
36
|
+
|
37
|
+
# Add zeros to the left if applyable, and accept lowercase
|
38
|
+
@nif = nif.rjust(9,'0')
|
39
|
+
nif.upcase!
|
40
|
+
end
|
41
|
+
private :setup
|
42
|
+
|
43
|
+
def invalid_format?
|
25
44
|
!nif.match(/^[A-Z]{1}\d{7}[A-Z0-9]{1}$/) && !nif.match(/^[0-9]{8}[A-Z]{1}$/)
|
45
|
+
end
|
46
|
+
|
47
|
+
def standard?
|
48
|
+
nif.match(/^[0-9]{8}[A-Z]{1}$/)
|
49
|
+
end
|
50
|
+
|
51
|
+
def special?
|
52
|
+
nif.match(/^[KLM]{1}/)
|
53
|
+
end
|
54
|
+
|
55
|
+
def cif?
|
56
|
+
nif.match(/^[ABCDEFGHJNPQRSUVW]{1}/)
|
57
|
+
end
|
58
|
+
|
59
|
+
def nie?
|
60
|
+
nif.match(/^[XYZ]{1}/)
|
61
|
+
end
|
26
62
|
|
27
|
-
|
28
|
-
|
63
|
+
def valid_cif?
|
64
|
+
nstr = cif_algorithm_value.to_s
|
65
|
+
(ival(nif[8]) == (64+cif_algorithm_value).chr) || (nif[8] == nstr[nstr.length-1])
|
66
|
+
end
|
67
|
+
|
68
|
+
def valid_nie?
|
69
|
+
niff = nif.gsub("X","0").gsub("Y","1").gsub("Z","2")
|
70
|
+
nif[8] == "TRWAGMYFPDXBNJZSQVHLCKE"[niff[0..7].to_i % 23]
|
71
|
+
end
|
72
|
+
|
73
|
+
def valid_special?
|
74
|
+
nif[8] == (64+cif_algorithm_value).chr
|
75
|
+
end
|
76
|
+
|
77
|
+
def valid_standard?
|
29
78
|
nif[8] == "TRWAGMYFPDXBNJZSQVHLCKE"[nif[0..7].to_i % 23]
|
30
|
-
|
31
|
-
|
79
|
+
end
|
80
|
+
|
81
|
+
def cif_algorithm_value
|
82
|
+
@cif_algorithm_value ||= calculate_cif_algorithm_value
|
83
|
+
end
|
84
|
+
private :cif_algorithm_value
|
85
|
+
|
86
|
+
def calculate_cif_algorithm_value
|
87
|
+
# CIF algorithm
|
32
88
|
sum = ival(nif[2]) + ival(nif[4]) + ival(nif[6])
|
33
89
|
[1,3,5,7].each do |i|
|
34
90
|
t = (2*(ival(nif[i]))).to_s
|
@@ -37,32 +93,22 @@ module Nifval
|
|
37
93
|
sum += t1+t2
|
38
94
|
end
|
39
95
|
sumstr = sum.to_s
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
(ival(nif[8]) == (64+n).chr) || (nif[8] == nstr[nstr.length-1])
|
49
|
-
elsif nif.match(/^[XYZ]{1}/)
|
50
|
-
# NIE
|
51
|
-
niff = nif.gsub("X","0").gsub("Y","1").gsub("Z","2")
|
52
|
-
nif[8] == "TRWAGMYFPDXBNJZSQVHLCKE"[niff[0..7].to_i % 23]
|
96
|
+
|
97
|
+
(10 - ival(sumstr[sumstr.length-1]))
|
98
|
+
end
|
99
|
+
private :calculate_cif_algorithm_value
|
100
|
+
|
101
|
+
def ival v
|
102
|
+
if Gem::Version.new(RUBY_VERSION.dup) >= Gem::Version.new("1.9")
|
103
|
+
v.to_i
|
53
104
|
else
|
54
|
-
|
105
|
+
v-48
|
55
106
|
end
|
56
107
|
end
|
108
|
+
private :ival
|
57
109
|
end
|
58
110
|
|
59
|
-
|
60
|
-
if Gem::Version.new(RUBY_VERSION.dup) >= Gem::Version.new("1.9")
|
61
|
-
v.to_i
|
62
|
-
else
|
63
|
-
v-48
|
64
|
-
end
|
65
|
-
end
|
111
|
+
|
66
112
|
end
|
67
113
|
end
|
68
114
|
|
data/lib/nifval/version.rb
CHANGED
data/nifval.gemspec
CHANGED
data/spec/nifval_spec.rb
CHANGED
@@ -10,6 +10,7 @@
|
|
10
10
|
%td= nif.value
|
11
11
|
%td= link_to 'Show', nif
|
12
12
|
%td= link_to 'Edit', edit_nif_path(nif)
|
13
|
-
%td=
|
13
|
+
%td= button_to 'Destroy', nif, :confirm => 'Are you sure?', :method => :delete
|
14
14
|
%br/
|
15
15
|
= link_to 'New Nif', new_nif_path
|
16
|
+
|
metadata
CHANGED
@@ -1,76 +1,88 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: nifval
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.2
|
5
5
|
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 2
|
9
|
-
- 1
|
10
|
-
version: 0.2.1
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Albert Bellonch
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
dependencies:
|
21
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2012-09-24 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
22
15
|
name: rspec
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '2.5'
|
22
|
+
type: :development
|
23
23
|
prerelease: false
|
24
|
-
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
25
|
none: false
|
26
|
-
requirements:
|
26
|
+
requirements:
|
27
27
|
- - ~>
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '2.5'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: fuubar
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
34
38
|
type: :development
|
35
|
-
version_requirements: *id001
|
36
|
-
- !ruby/object:Gem::Dependency
|
37
|
-
name: activemodel
|
38
39
|
prerelease: false
|
39
|
-
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: activemodel
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
40
49
|
none: false
|
41
|
-
requirements:
|
42
|
-
- -
|
43
|
-
- !ruby/object:Gem::Version
|
44
|
-
|
45
|
-
segments:
|
46
|
-
- 0
|
47
|
-
version: "0"
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
48
54
|
type: :runtime
|
49
|
-
version_requirements: *id002
|
50
|
-
- !ruby/object:Gem::Dependency
|
51
|
-
name: i18n
|
52
55
|
prerelease: false
|
53
|
-
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: i18n
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
54
65
|
none: false
|
55
|
-
requirements:
|
56
|
-
- -
|
57
|
-
- !ruby/object:Gem::Version
|
58
|
-
|
59
|
-
segments:
|
60
|
-
- 0
|
61
|
-
version: "0"
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
62
70
|
type: :runtime
|
63
|
-
|
64
|
-
|
65
|
-
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
description: Validates a Spanish NIF/CIF/NIE by verifying that the digit control corresponds
|
79
|
+
to the number.
|
80
|
+
email:
|
66
81
|
- albert@itnig.net
|
67
82
|
executables: []
|
68
|
-
|
69
83
|
extensions: []
|
70
|
-
|
71
84
|
extra_rdoc_files: []
|
72
|
-
|
73
|
-
files:
|
85
|
+
files:
|
74
86
|
- .rspec
|
75
87
|
- Gemfile
|
76
88
|
- Gemfile.lock
|
@@ -151,40 +163,30 @@ files:
|
|
151
163
|
- test_app/test/unit/helpers/static_helper_test.rb
|
152
164
|
- test_app/test/unit/nif_test.rb
|
153
165
|
- test_app/vendor/plugins/.gitkeep
|
154
|
-
has_rdoc: true
|
155
166
|
homepage: https://github.com/albertbellonch/nifval
|
156
167
|
licenses: []
|
157
|
-
|
158
168
|
post_install_message:
|
159
169
|
rdoc_options: []
|
160
|
-
|
161
|
-
require_paths:
|
170
|
+
require_paths:
|
162
171
|
- lib
|
163
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
172
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
164
173
|
none: false
|
165
|
-
requirements:
|
166
|
-
- -
|
167
|
-
- !ruby/object:Gem::Version
|
168
|
-
|
169
|
-
|
170
|
-
- 0
|
171
|
-
version: "0"
|
172
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
174
|
+
requirements:
|
175
|
+
- - ! '>='
|
176
|
+
- !ruby/object:Gem::Version
|
177
|
+
version: '0'
|
178
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
173
179
|
none: false
|
174
|
-
requirements:
|
175
|
-
- -
|
176
|
-
- !ruby/object:Gem::Version
|
177
|
-
|
178
|
-
segments:
|
179
|
-
- 0
|
180
|
-
version: "0"
|
180
|
+
requirements:
|
181
|
+
- - ! '>='
|
182
|
+
- !ruby/object:Gem::Version
|
183
|
+
version: '0'
|
181
184
|
requirements: []
|
182
|
-
|
183
185
|
rubyforge_project: nifval
|
184
|
-
rubygems_version: 1.
|
186
|
+
rubygems_version: 1.8.24
|
185
187
|
signing_key:
|
186
188
|
specification_version: 3
|
187
189
|
summary: Validates a Spanish NIF/CIF/NIE
|
188
|
-
test_files:
|
190
|
+
test_files:
|
189
191
|
- spec/nifval_spec.rb
|
190
192
|
- spec/spec_helper.rb
|