missing_validators 1.1.0 → 2.0.0

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.
Files changed (35) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +1 -0
  3. data/README.md +7 -11
  4. data/Rakefile +9 -3
  5. data/config/locales/en.yml +2 -8
  6. data/lib/missing_validators.rb +10 -8
  7. data/lib/missing_validators/matchers/ensure_valid_email_format_of.rb +6 -6
  8. data/lib/missing_validators/matchers/ensure_valid_imei_format_of.rb +6 -6
  9. data/lib/missing_validators/matchers/ensure_valid_mac_address_format_of.rb +6 -6
  10. data/lib/missing_validators/matchers/ensure_valid_url_format_of.rb +6 -6
  11. data/lib/missing_validators/validators/base_validator.rb +17 -6
  12. data/lib/missing_validators/validators/color_validator.rb +5 -7
  13. data/lib/missing_validators/validators/email_validator.rb +20 -10
  14. data/lib/missing_validators/validators/equality_validator.rb +18 -12
  15. data/lib/missing_validators/validators/imei_validator.rb +14 -13
  16. data/lib/missing_validators/validators/inequality_validator.rb +8 -24
  17. data/lib/missing_validators/validators/latitude_validator.rb +6 -6
  18. data/lib/missing_validators/validators/longitude_validator.rb +6 -6
  19. data/lib/missing_validators/validators/mac_address_validator.rb +12 -12
  20. data/lib/missing_validators/validators/url_validator.rb +37 -19
  21. data/lib/missing_validators/version.rb +3 -3
  22. data/missing_validators.gemspec +17 -13
  23. data/spec/spec_helper.rb +3 -3
  24. data/spec/validators/color_validator_spec.rb +11 -13
  25. data/spec/validators/email_validator_spec.rb +31 -21
  26. data/spec/validators/equality_validator_spec.rb +16 -29
  27. data/spec/validators/imei_spec.rb +25 -27
  28. data/spec/validators/inequality_validator_spec.rb +16 -28
  29. data/spec/validators/latitude_validator_spec.rb +15 -17
  30. data/spec/validators/longitude_validator_spec.rb +15 -17
  31. data/spec/validators/mac_address_spec.rb +42 -45
  32. data/spec/validators/url_validator_spec.rb +44 -44
  33. metadata +85 -12
  34. data/lib/missing_validators/matchers/ensure_equality_of_matcher.rb +0 -27
  35. data/lib/missing_validators/matchers/ensure_inequality_of_matcher.rb +0 -27
@@ -1,39 +1,37 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe ImeiValidator do
4
- context "IMEI has valid format" do
5
- let(:klass) do
6
- Class.new do
7
- include ActiveModel::Validations
8
- attr_accessor :imei, :name
9
- validates :imei, imei: true
10
- end
4
+ let(:klass) do
5
+ Class.new do
6
+ include ActiveModel::Validations
7
+ attr_accessor :imei, :name
8
+ validates :imei, imei: true
11
9
  end
10
+ end
12
11
 
13
- subject { klass.new }
14
-
15
- it { should ensure_valid_imei_format_of(:imei) }
16
- it { should_not ensure_valid_imei_format_of(:name) }
12
+ subject { klass.new }
17
13
 
18
- it { should allow_value(356843052637512).for(:imei) }
19
- it { should allow_value("356843052637512").for(:imei) }
20
- it { should allow_value("35-684305-2637512").for(:imei) }
21
- it { should allow_value("35-684305.263.7512").for(:imei) }
14
+ it { should ensure_valid_imei_format_of(:imei) }
15
+ it { should_not ensure_valid_imei_format_of(:name) }
22
16
 
23
- context "value too short" do
24
- it { should_not allow_value("3568430537512").for(:imei) }
25
- it { should_not allow_value("3").for(:imei) }
26
- end
17
+ context 'value is valid' do
18
+ it { should allow_value(356_843_052_637_512).for(:imei) }
19
+ it { should allow_value('356843052637512').for(:imei) }
20
+ it { should allow_value('35-684305-2637512').for(:imei) }
21
+ it { should allow_value('35-684305.263.7512').for(:imei) }
22
+ end
27
23
 
28
- it "can't be too long" do
29
- should_not allow_value("35684305263751233").for(:imei)
30
- end
24
+ context 'value too short' do
25
+ it { should_not allow_value('3568430537512').for(:imei) }
26
+ it { should_not allow_value('3').for(:imei) }
27
+ end
31
28
 
32
- context "checksum doesn't match" do
33
- it { should_not allow_value("356843052637513").for(:imei) }
34
- it { should_not allow_value("156843052637512").for(:imei) }
35
- end
29
+ context 'value is too long' do
30
+ it { should_not allow_value('35684305263751233').for(:imei) }
31
+ end
36
32
 
37
- it { should_not allow_value("invalid").for(:imei) }
33
+ context 'luhn checksum does not match' do
34
+ it { should_not allow_value('356843052637513').for(:imei) }
35
+ it { should_not allow_value('156843052637512').for(:imei) }
38
36
  end
39
37
  end
@@ -1,26 +1,19 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe InequalityValidator do
4
+ subject(:model) { klass.new }
5
+
4
6
  describe do
5
7
  let(:klass) do
6
8
  Class.new do
7
9
  include ActiveModel::Validations
8
10
  attr_accessor :attr
9
- validates :attr, inequality: { to: Proc.new { |o| "invalid value" } }
11
+ validates :attr, inequality: { to: 'invalid value' }
10
12
  end
11
13
  end
12
14
 
13
- subject(:model){ klass.new }
14
-
15
- specify "field is the same as the result of the validating proc" do
16
- model.attr = "invalid value"
17
- expect(model).to be_invalid
18
- end
19
-
20
- specify "field is not the same as the result of the validating proc" do
21
- model.attr = "valid value"
22
- expect(model).to be_valid
23
- end
15
+ it { should allow_value('valid value').for(:attr) }
16
+ it { should_not allow_value('invalid value').for(:attr) }
24
17
  end
25
18
 
26
19
  describe do
@@ -28,39 +21,34 @@ describe InequalityValidator do
28
21
  Class.new do
29
22
  include ActiveModel::Validations
30
23
  attr_accessor :origin, :destination, :airline
31
- validates :origin, inequality: { to: :destination }
24
+ validates :origin, inequality: { to: ->(o) { o.destination } }
32
25
  end
33
26
  end
34
27
 
35
- subject(:model){ klass.new }
36
-
37
- it { should ensure_inequality_of(:origin).to(:destination) }
38
- it { should_not ensure_inequality_of(:origin).to(:airline) }
39
-
40
- specify "both fields have same values" do
41
- model.origin = model.destination = "MOW"
28
+ specify 'both fields have same values' do
29
+ model.origin = model.destination = 'MOW'
42
30
  expect(model).to be_invalid
43
31
  end
44
32
 
45
- specify "fields have different value" do
46
- model.origin = "NYC"
47
- model.destination = "MOW"
33
+ specify 'fields have different value' do
34
+ model.origin = 'NYC'
35
+ model.destination = 'MOW'
48
36
  expect(model).to be_valid
49
37
  end
50
38
 
51
- specify "first field has value, the second is nil" do
52
- model.origin = "NYC"
39
+ specify 'first field has value, the second is nil' do
40
+ model.origin = 'NYC'
53
41
  model.destination = nil
54
42
  expect(model).to be_valid
55
43
  end
56
44
 
57
- specify "first field is nil, the second has value" do
45
+ specify 'first field is nil, the second has value' do
58
46
  model.origin = nil
59
- model.destination = "NYC"
47
+ model.destination = 'NYC'
60
48
  expect(model).to be_valid
61
49
  end
62
50
 
63
- specify "both fields are nil" do
51
+ specify 'both fields are nil' do
64
52
  model.origin = model.destination = nil
65
53
  expect(model).to be_invalid
66
54
  end
@@ -1,26 +1,24 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe LatitudeValidator do
4
- context "Latitude has a valid value" do
5
- let(:klass) do
6
- Class.new do
7
- include ActiveModel::Validations
8
- attr_accessor :lat
9
- validates :lat, latitude: true
10
- end
4
+ let(:klass) do
5
+ Class.new do
6
+ include ActiveModel::Validations
7
+ attr_accessor :lat
8
+ validates :lat, latitude: true
11
9
  end
10
+ end
12
11
 
13
- subject { klass.new }
12
+ subject { klass.new }
14
13
 
15
- it { should allow_value(-90).for(:lat) }
16
- it { should allow_value(90).for(:lat) }
17
- it { should allow_value(0).for(:lat) }
18
- it { should allow_value(9.33).for(:lat) }
14
+ it { should allow_value(-90).for(:lat) }
15
+ it { should allow_value(90).for(:lat) }
16
+ it { should allow_value(0).for(:lat) }
17
+ it { should allow_value(9.33).for(:lat) }
19
18
 
20
- it { should_not allow_value(-90.1).for(:lat) }
21
- it { should_not allow_value(90.1).for(:lat) }
19
+ it { should_not allow_value(-90.1).for(:lat) }
20
+ it { should_not allow_value(90.1).for(:lat) }
22
21
 
23
- it { should_not allow_value(nil).for(:lat) }
24
- it { should_not allow_value('').for(:lat) }
25
- end
22
+ it { should_not allow_value(nil).for(:lat) }
23
+ it { should_not allow_value('').for(:lat) }
26
24
  end
@@ -1,26 +1,24 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe LongitudeValidator do
4
- context "Longitude has a valid value" do
5
- let(:klass) do
6
- Class.new do
7
- include ActiveModel::Validations
8
- attr_accessor :lon
9
- validates :lon, longitude: true
10
- end
4
+ let(:klass) do
5
+ Class.new do
6
+ include ActiveModel::Validations
7
+ attr_accessor :lon
8
+ validates :lon, longitude: true
11
9
  end
10
+ end
12
11
 
13
- subject { klass.new }
12
+ subject { klass.new }
14
13
 
15
- it { should allow_value(-180).for(:lon) }
16
- it { should allow_value(180).for(:lon) }
17
- it { should allow_value(0).for(:lon) }
18
- it { should allow_value(9.33).for(:lon) }
14
+ it { should allow_value(-180).for(:lon) }
15
+ it { should allow_value(180).for(:lon) }
16
+ it { should allow_value(0).for(:lon) }
17
+ it { should allow_value(9.33).for(:lon) }
19
18
 
20
- it { should_not allow_value(-181.1).for(:lon) }
21
- it { should_not allow_value(181.1).for(:lon) }
19
+ it { should_not allow_value(-181.1).for(:lon) }
20
+ it { should_not allow_value(181.1).for(:lon) }
22
21
 
23
- it { should_not allow_value(nil).for(:lon) }
24
- it { should_not allow_value('').for(:lon) }
25
- end
22
+ it { should_not allow_value(nil).for(:lon) }
23
+ it { should_not allow_value('').for(:lon) }
26
24
  end
@@ -1,51 +1,48 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe MacAddressValidator do
4
- context "MAC address has valid format" do
5
- let(:klass) do
6
- Class.new do
7
- include ActiveModel::Validations
8
- attr_accessor :mac, :name
9
- validates :mac, mac_address: true
10
- end
4
+ let(:klass) do
5
+ Class.new do
6
+ include ActiveModel::Validations
7
+ attr_accessor :mac, :name
8
+ validates :mac, mac_address: true
11
9
  end
12
-
13
- subject { klass.new }
14
-
15
- it { should ensure_valid_mac_address_format_of(:mac) }
16
- it { should_not ensure_valid_mac_address_format_of(:name) }
17
-
18
- # Valid formats
19
- it { should allow_value("08:00:2b:01:02:03").for(:mac) }
20
- it { should allow_value("08-00-2b-01-02-03").for(:mac) }
21
- it { should allow_value("08.00.2b.01.02.03").for(:mac) }
22
- it { should allow_value("08 00 2b 01 02 03").for(:mac) }
23
- it { should allow_value("08002b:010203").for(:mac) }
24
- it { should allow_value("08002b.010203").for(:mac) }
25
- it { should allow_value("08002b-010203").for(:mac) }
26
- it { should allow_value("0800.2b01.0203").for(:mac) }
27
- it { should allow_value("0800-2b01-0203").for(:mac) }
28
- it { should allow_value("0800 2b01 0203").for(:mac) }
29
- it { should allow_value("08002b010203").for(:mac) }
30
-
31
- # Mixed Separators
32
- it { should_not allow_value("08-00:2b:01:02:03").for(:mac) }
33
- it { should_not allow_value("08.00:2b:01:02:03").for(:mac) }
34
- it { should_not allow_value("08 00:2b:01:02:03").for(:mac) }
35
- it { should_not allow_value("0800-2b01:0203").for(:mac) }
36
- it { should_not allow_value("0800 2b01:0203").for(:mac) }
37
-
38
- # Too Short
39
- it { should_not allow_value("08:00:2b:01:02").for(:mac) }
40
- it { should_not allow_value("08-00-2b-01-02").for(:mac) }
41
-
42
- # Too Long
43
- it { should_not allow_value("08:00:2b:01:02:03:04").for(:mac) }
44
-
45
- # Non-Hex Characters
46
- it { should_not allow_value("qq:00:00:00:00:00").for(:mac) }
47
-
48
-
49
- it { should_not allow_value("invalid").for(:mac) }
50
10
  end
11
+
12
+ subject { klass.new }
13
+
14
+ it { should ensure_valid_mac_address_format_of(:mac) }
15
+ it { should_not ensure_valid_mac_address_format_of(:name) }
16
+
17
+ # Valid formats
18
+ it { should allow_value('08:00:2b:01:02:03').for(:mac) }
19
+ it { should allow_value('08-00-2B-01-02-03').for(:mac) }
20
+ it { should allow_value('08.00.2b.01.02.03').for(:mac) }
21
+ it { should allow_value('08 00 2B 01 02 03').for(:mac) }
22
+ it { should allow_value('08002b:010203').for(:mac) }
23
+ it { should allow_value('08002B.010203').for(:mac) }
24
+ it { should allow_value('08002b-010203').for(:mac) }
25
+ it { should allow_value('0800.2b01.0203').for(:mac) }
26
+ it { should allow_value('0800-2B01-0203').for(:mac) }
27
+ it { should allow_value('0800 2b01 0203').for(:mac) }
28
+ it { should allow_value('08002b010203').for(:mac) }
29
+
30
+ # Mixed Separators
31
+ it { should_not allow_value('08-00:2b:01:02:03').for(:mac) }
32
+ it { should_not allow_value('08.00:2b:01:02:03').for(:mac) }
33
+ it { should_not allow_value('08 00:2b:01:02:03').for(:mac) }
34
+ it { should_not allow_value('0800-2b01:0203').for(:mac) }
35
+ it { should_not allow_value('0800 2B01:0203').for(:mac) }
36
+
37
+ # Too Short
38
+ it { should_not allow_value('08:00:2b:01:02').for(:mac) }
39
+ it { should_not allow_value('08-00-2B-01-02').for(:mac) }
40
+
41
+ # Too Long
42
+ it { should_not allow_value('08:00:2b:01:02:03:04').for(:mac) }
43
+
44
+ # Non-Hex Characters
45
+ it { should_not allow_value('qq:00:00:00:00:00').for(:mac) }
46
+
47
+ it { should_not allow_value('invalid').for(:mac) }
51
48
  end
@@ -1,7 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe UrlValidator do
4
- context "url has valid format" do
4
+ context 'url has valid format' do
5
5
  let(:klass) do
6
6
  Class.new do
7
7
  include ActiveModel::Validations
@@ -15,28 +15,29 @@ describe UrlValidator do
15
15
  it { should ensure_valid_url_format_of(:url) }
16
16
  it { should_not ensure_valid_url_format_of(:name) }
17
17
 
18
- it { should allow_value("http://example.com").for(:url) }
19
- it { should allow_value("http://FooBar.cOm").for(:url) }
20
- it { should allow_value("http://foo.bar.baz.com").for(:url) }
21
- it { should allow_value("http://123.com").for(:url) }
22
- it { should allow_value("http://www.example.ru").for(:url) }
23
- it { should allow_value("http://user-example.co.uk").for(:url) }
24
- it { should allow_value("https://example.com").for(:url) }
25
- it { should allow_value("http://example.org/").for(:url) }
26
- it { should allow_value("https://example.net/index.html").for(:url) }
27
- it { should allow_value("http://example.net/login.php").for(:url) }
28
- it { should allow_value("https://example.travel/").for(:url) }
29
- it { should allow_value("http://example.aero").for(:url) }
30
- it { should allow_value("http://example.aero?foo=bar").for(:url) }
31
-
32
- it { should_not allow_value("example").for(:url) }
33
- it { should_not allow_value("http://user_examplecom").for(:url) }
34
- it { should_not allow_value("http://user_example.com").for(:url) }
35
- it { should_not allow_value("http://user_example.a").for(:url) }
36
- it { should_not allow_value("ftp://foo.bar.baz.com").for(:url) }
18
+ it { should allow_value('http://example.com').for(:url) }
19
+ it { should allow_value('http://FooBar.cOm').for(:url) }
20
+ it { should allow_value('http://foo.bar.baz.com').for(:url) }
21
+ it { should allow_value('http://123.com').for(:url) }
22
+ it { should allow_value('http://www.example.ru').for(:url) }
23
+ it { should allow_value('http://user-example.co.uk').for(:url) }
24
+ it { should allow_value('https://example.com').for(:url) }
25
+ it { should allow_value('http://example.org/').for(:url) }
26
+ it { should allow_value('https://example.net/index.html').for(:url) }
27
+ it { should allow_value('http://example.net/login.php').for(:url) }
28
+ it { should allow_value('https://example.travel/').for(:url) }
29
+ it { should allow_value('http://example.aero').for(:url) }
30
+ it { should allow_value('http://example.aero?foo=bar').for(:url) }
31
+ it { should allow_value('http://user_example.com').for(:url) }
32
+
33
+ it { should_not allow_value('http://user_examplecom').for(:url) }
34
+ it { should_not allow_value('http://user example.com').for(:url) }
35
+ it { should_not allow_value('http://user_example.a').for(:url) }
36
+ it { should_not allow_value(':').for(:url) }
37
+ it { should_not allow_value('.').for(:url) }
37
38
  end
38
39
 
39
- describe "url must be in a specific domain" do
40
+ describe 'url must be in a specific domain' do
40
41
  let(:klass) do
41
42
  Class.new do
42
43
  include ActiveModel::Validations
@@ -48,17 +49,17 @@ describe UrlValidator do
48
49
 
49
50
  subject { klass.new }
50
51
 
51
- it { should allow_value("http://example.org").for(:url1) }
52
- it { should_not allow_value("http://example.com").for(:url1) }
52
+ it { should allow_value('http://example.org').for(:url1) }
53
+ it { should_not allow_value('http://example.com').for(:url1) }
53
54
 
54
- it { should allow_value("http://example.org").for(:url2) }
55
- it { should allow_value("http://example.edu").for(:url2) }
56
- it { should allow_value("http://example.com.au").for(:url2) }
57
- it { should allow_value("http://example.Com.Au").for(:url2) }
58
- it { should_not allow_value("http://example.com").for(:url2) }
55
+ it { should allow_value('http://example.org').for(:url2) }
56
+ it { should allow_value('http://example.edu').for(:url2) }
57
+ it { should allow_value('http://example.com.au').for(:url2) }
58
+ it { should allow_value('http://example.Com.Au').for(:url2) }
59
+ it { should_not allow_value('http://example.com').for(:url2) }
59
60
  end
60
61
 
61
- describe "url must be domain root" do
62
+ describe 'url must be domain root' do
62
63
  let(:klass) do
63
64
  Class.new do
64
65
  include ActiveModel::Validations
@@ -70,18 +71,17 @@ describe UrlValidator do
70
71
 
71
72
  subject { klass.new }
72
73
 
73
- it { should allow_value("http://example.org").for(:url1) }
74
- it { should allow_value("http://example.org/").for(:url1) }
75
- it { should_not allow_value("http://example.com/test").for(:url1) }
76
- it { should_not allow_value("http://example.com/#fragment").for(:url1) }
77
- it { should_not allow_value("http://example.com/?key=value").for(:url1) }
74
+ it { should allow_value('http://example.org').for(:url1) }
75
+ it { should allow_value('http://example.org/').for(:url1) }
76
+ it { should_not allow_value('http://example.com/test').for(:url1) }
77
+ it { should_not allow_value('http://example.com/#fragment').for(:url1) }
78
+ it { should_not allow_value('http://example.com/?key=value').for(:url1) }
78
79
 
79
-
80
- it { should allow_value("http://example.org").for(:url2) }
81
- it { should allow_value("http://example.org/lorem").for(:url2) }
80
+ it { should allow_value('http://example.org').for(:url2) }
81
+ it { should allow_value('http://example.org/lorem').for(:url2) }
82
82
  end
83
83
 
84
- describe "url must have a specific scheme" do
84
+ describe 'url must have a specific scheme' do
85
85
  let(:klass) do
86
86
  Class.new do
87
87
  include ActiveModel::Validations
@@ -93,12 +93,12 @@ describe UrlValidator do
93
93
 
94
94
  subject { klass.new }
95
95
 
96
- it { should allow_value("http://example.org").for(:url1) }
97
- it { should_not allow_value("https://example.org").for(:url1) }
96
+ it { should allow_value('http://example.org').for(:url1) }
97
+ it { should_not allow_value('https://example.org').for(:url1) }
98
98
 
99
- it { should allow_value("http://example.org").for(:url2) }
100
- it { should allow_value("https://example.org").for(:url2) }
101
- it { should allow_value("HTTPS://example.org").for(:url2) }
102
- it { should_not allow_value("ftp://example.org").for(:url2) }
99
+ it { should allow_value('http://example.org').for(:url2) }
100
+ it { should allow_value('https://example.org').for(:url2) }
101
+ it { should allow_value('HTTPS://example.org').for(:url2) }
102
+ it { should_not allow_value('ftp://example.org').for(:url2) }
103
103
  end
104
104
  end