uk_validators 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +31 -0
- data/lib/uk_validators.rb +1 -0
- data/lib/uk_validators/passport_number_validator.rb +20 -0
- data/lib/uk_validators/version.rb +1 -1
- data/test/passport_number_test.rb +60 -0
- metadata +6 -3
data/README.md
CHANGED
@@ -5,6 +5,7 @@ This library contains Rails 3 custom validators for the following UK-centric dat
|
|
5
5
|
* National Insurance Number
|
6
6
|
* Post Code
|
7
7
|
* Driving Licence Number
|
8
|
+
* Passport Number
|
8
9
|
|
9
10
|
|
10
11
|
## Installation
|
@@ -113,6 +114,36 @@ For the example User model above, the customised en.yml would be:
|
|
113
114
|
driving_licence: "is not valid"
|
114
115
|
|
115
116
|
|
117
|
+
## Passport Number
|
118
|
+
A UK passport number is simply made up of 9 numeric characters.
|
119
|
+
|
120
|
+
References: [NHS Data Dictionary](http://www.datadictionary.nhs.uk/version2/data_dictionary/data_field_notes/p/passport_number__o_new_c__de.asp?shownav=1), [highprogrammer.com](http://www.highprogrammer.com/alan/numbers/mrp.html)
|
121
|
+
|
122
|
+
### Usage
|
123
|
+
|
124
|
+
```ruby
|
125
|
+
class HolidayMaker < ActiveRecord::Base
|
126
|
+
validates :passport, passport_number: true
|
127
|
+
end
|
128
|
+
```
|
129
|
+
|
130
|
+
### I18n
|
131
|
+
|
132
|
+
The default error message is `is not a valid Passport No.`
|
133
|
+
|
134
|
+
This can be translated in the same was as any other Rails validation message using the key **:passport_number**.
|
135
|
+
|
136
|
+
For the example HolidayMaker model above, the customised en.yml would be:
|
137
|
+
|
138
|
+
en:
|
139
|
+
activerecord:
|
140
|
+
errors:
|
141
|
+
models:
|
142
|
+
holiday_maker:
|
143
|
+
attributes:
|
144
|
+
passport:
|
145
|
+
passport_number: "is not valid"
|
146
|
+
|
116
147
|
|
117
148
|
|
118
149
|
## Contributing
|
data/lib/uk_validators.rb
CHANGED
@@ -0,0 +1,20 @@
|
|
1
|
+
class PassportNumberValidator < ActiveModel::EachValidator
|
2
|
+
|
3
|
+
def validate_each(record, attribute, value)
|
4
|
+
record.errors.add(attribute, invalid_message(record, attribute)) unless valid_passport_number?(value)
|
5
|
+
end
|
6
|
+
|
7
|
+
private
|
8
|
+
|
9
|
+
# UK format is simply 9 digits
|
10
|
+
def valid_passport_number?(value)
|
11
|
+
value =~ /^[0-9]{9}$/
|
12
|
+
end
|
13
|
+
|
14
|
+
def invalid_message(record, attribute)
|
15
|
+
I18n.t :passport_number,
|
16
|
+
scope: "#{record.class.i18n_scope}.errors.models.#{record.class.model_name.i18n_key}.attributes.#{attribute}",
|
17
|
+
default: "is not a valid Passport No."
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
require_relative 'test_helper'
|
2
|
+
|
3
|
+
class TestPassportNumberValidator < MiniTest::Unit::TestCase
|
4
|
+
class HolidayMaker < TestModel
|
5
|
+
validates :passport, passport_number: true
|
6
|
+
end
|
7
|
+
|
8
|
+
def test_valid_passport_numbers
|
9
|
+
valid_passport_numbers.each { |passport| assert HolidayMaker.new(passport: passport).valid?, "Passport No. should be valid: #{passport}" }
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_invalid_passport_numbers
|
13
|
+
invalid_passport_numbers.each { |passport| assert HolidayMaker.new(passport: passport).invalid?, "Passport No. should be invalid: #{passport}" }
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def valid_passport_numbers
|
19
|
+
[
|
20
|
+
'012345678',
|
21
|
+
'987654321',
|
22
|
+
'000000000',
|
23
|
+
'111111111',
|
24
|
+
'222222222',
|
25
|
+
'333333333',
|
26
|
+
'444444444',
|
27
|
+
'555555555',
|
28
|
+
'666666666',
|
29
|
+
'777777777',
|
30
|
+
'888888888',
|
31
|
+
'999999999',
|
32
|
+
]
|
33
|
+
end
|
34
|
+
|
35
|
+
def invalid_passport_numbers
|
36
|
+
[
|
37
|
+
'01234567',
|
38
|
+
'9876543',
|
39
|
+
'012345',
|
40
|
+
'98765',
|
41
|
+
'0123',
|
42
|
+
'987',
|
43
|
+
'01',
|
44
|
+
'9',
|
45
|
+
'',
|
46
|
+
' ',
|
47
|
+
'a12345678',
|
48
|
+
'0b2345678',
|
49
|
+
'01b345678',
|
50
|
+
'012c45678',
|
51
|
+
'0123d5678',
|
52
|
+
'01234e678',
|
53
|
+
'012345f78',
|
54
|
+
'0123456g8',
|
55
|
+
'01234567h',
|
56
|
+
'ijklmnopq',
|
57
|
+
'1234&*()['
|
58
|
+
]
|
59
|
+
end
|
60
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: uk_validators
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -90,10 +90,12 @@ files:
|
|
90
90
|
- lib/uk_validators.rb
|
91
91
|
- lib/uk_validators/driving_licence_validator.rb
|
92
92
|
- lib/uk_validators/nino_validator.rb
|
93
|
+
- lib/uk_validators/passport_number_validator.rb
|
93
94
|
- lib/uk_validators/postcode_validator.rb
|
94
95
|
- lib/uk_validators/version.rb
|
95
96
|
- test/driving_licence_test.rb
|
96
97
|
- test/nino_test.rb
|
98
|
+
- test/passport_number_test.rb
|
97
99
|
- test/postcode_test.rb
|
98
100
|
- test/test_helper.rb
|
99
101
|
- uk_validators.gemspec
|
@@ -112,7 +114,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
112
114
|
version: '0'
|
113
115
|
segments:
|
114
116
|
- 0
|
115
|
-
hash: -
|
117
|
+
hash: -1062937670582392056
|
116
118
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
117
119
|
none: false
|
118
120
|
requirements:
|
@@ -121,7 +123,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
121
123
|
version: '0'
|
122
124
|
segments:
|
123
125
|
- 0
|
124
|
-
hash: -
|
126
|
+
hash: -1062937670582392056
|
125
127
|
requirements: []
|
126
128
|
rubyforge_project:
|
127
129
|
rubygems_version: 1.8.25
|
@@ -131,5 +133,6 @@ summary: Rails validations for UK data
|
|
131
133
|
test_files:
|
132
134
|
- test/driving_licence_test.rb
|
133
135
|
- test/nino_test.rb
|
136
|
+
- test/passport_number_test.rb
|
134
137
|
- test/postcode_test.rb
|
135
138
|
- test/test_helper.rb
|