za-id-validator 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.1
1
+ 0.1.2
@@ -1,31 +1,35 @@
1
1
  module ZaIdValidator
2
2
 
3
3
  def valid_za_identity_number?(id)
4
- length_is_valid?(id) && id.to_s.chars.to_a.last.to_i == z(id)
4
+ id = id.to_s # force to a string
5
+ return false unless length_is_valid?(id)
6
+ id.chars.to_a.last.to_i == z(id)
5
7
  end
6
8
 
7
- def length_is_valid?(id)
8
- id =~ /^\d{13}$/
9
- end
9
+ private
10
10
 
11
- def a(id)
12
- id.chars.to_a.values_at(0,2,4,6,8,10).inject(0) { |sum, v| sum += v.to_i }
13
- end
11
+ def length_is_valid?(id)
12
+ id =~ /^\d{13}$/
13
+ end
14
14
 
15
- def b(id)
16
- id.chars.to_a.values_at(1,3,5,7,9,11).join
17
- end
15
+ def a(id)
16
+ id.chars.to_a.values_at(0,2,4,6,8,10).inject(0) { |sum, v| sum += v.to_i }
17
+ end
18
18
 
19
- def c(id)
20
- (b(id).to_i * 2).to_s.chars.to_a.inject(0) { |sum, v| sum += v.to_i }
21
- end
19
+ def b(id)
20
+ id.chars.to_a.values_at(1,3,5,7,9,11).join
21
+ end
22
22
 
23
- def d(id)
24
- a(id) + c(id)
25
- end
23
+ def c(id)
24
+ (b(id).to_i * 2).to_s.chars.to_a.inject(0) { |sum, v| sum += v.to_i }
25
+ end
26
26
 
27
- def z(id)
28
- 10 - (d(id) % 10)
29
- end
27
+ def d(id)
28
+ a(id) + c(id)
29
+ end
30
+
31
+ def z(id)
32
+ 10 - (d(id) % 10)
33
+ end
30
34
 
31
35
  end
@@ -11,6 +11,7 @@ class TestZaIdValidator < Test::Unit::TestCase
11
11
 
12
12
  setup do
13
13
  @valid = "8001015009087"
14
+ @valid_integer = 8001015009087
14
15
  end
15
16
 
16
17
  should "be the correct length" do
@@ -38,7 +39,15 @@ class TestZaIdValidator < Test::Unit::TestCase
38
39
  end
39
40
 
40
41
  should "be a valid ID number" do
41
- assert valid_za_identity_number?(@valid)
42
+ result = valid_za_identity_number?(@valid)
43
+ assert_not_nil(result)
44
+ assert(result)
45
+ end
46
+
47
+ should "be a valid ID number (when passed as an int)" do
48
+ result = valid_za_identity_number?(@valid_integer)
49
+ assert_not_nil(result)
50
+ assert(result)
42
51
  end
43
52
 
44
53
  end
@@ -50,7 +59,30 @@ class TestZaIdValidator < Test::Unit::TestCase
50
59
  end
51
60
 
52
61
  should "not be a valid ID number" do
53
- assert !valid_za_identity_number?(@invalid)
62
+ result = valid_za_identity_number?(@invalid)
63
+ assert_not_nil(result)
64
+ assert(!result)
65
+ end
66
+
67
+ end
68
+
69
+ context "an ID number that is too long" do
70
+
71
+ setup do
72
+ @too_long = "80010150090871"
73
+ @too_long_integer = 80010150090871
74
+ end
75
+
76
+ should "not be a valid ID number" do
77
+ result = valid_za_identity_number?(@too_long)
78
+ assert_not_nil(result)
79
+ assert(!result)
80
+ end
81
+
82
+ should "not be a valid ID number (when passed as an int)" do
83
+ result = valid_za_identity_number?(@too_long_integer)
84
+ assert_not_nil(result)
85
+ assert(!result)
54
86
  end
55
87
 
56
88
  end
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{za-id-validator}
8
- s.version = "0.1.1"
8
+ s.version = "0.1.2"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Craig Paterson"]
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: za-id-validator
3
3
  version: !ruby/object:Gem::Version
4
- hash: 25
4
+ hash: 31
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 1
10
- version: 0.1.1
9
+ - 2
10
+ version: 0.1.2
11
11
  platform: ruby
12
12
  authors:
13
13
  - Craig Paterson