missing_validators 1.0.1 → 1.1.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0e08933cb1d48eaa485ea7c22290d71be64477d0
4
- data.tar.gz: 9456a6513e7249af10493f30d28d0a1947cfd5d3
3
+ metadata.gz: 86d60392993a9b27e6d49a2ea7eb698c6ee98f1c
4
+ data.tar.gz: 5ff9de4d33d2e3a97c9c07743c7bc60b9d87f8dc
5
5
  SHA512:
6
- metadata.gz: d54385d82f777f5605fbfc6a49bb42a0c8ab95f490973816ad25f2ff818a8ca15e05a7a853c7c28da482895a6c5840885457b207da24e55110019c05ef41429d
7
- data.tar.gz: e7e588451d9109835edfa1e2d15e57598ed37287a6fbb386577e1007bb61b97359ce3424916806670fd24cb02f78c364da39465f4c543ef48e4d8c0965f6fb4e
6
+ metadata.gz: 0349e0818d3a3281cbd2bd77803c6fc12409e85a890ba537ced0897e0d22e826f91c0a53d16f2c1256df86d394678ce358919ab4b249820f26c90930df103111
7
+ data.tar.gz: 91229866d28463716b4f65bc81a472c87efb487e2c32504cc3d0e7930930475f7bb802bf4fc28522fe7b5ffcc0f9ae9762ab32ea49db2ab36467722653edff80
data/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # MissingValidators
2
2
 
3
3
  [![Build Status](https://travis-ci.org/andrewgr/missing_validators.png)](https://travis-ci.org/andrewgr/missing_validators)
4
- [![Code Climate](https://codeclimate.com/badge.png)](https://codeclimate.com/github/andrewgr/missing_validators)
4
+ [![Code Climate](https://codeclimate.com/github/andrewgr/missing_validators/badges/gpa.svg)](https://codeclimate.com/github/andrewgr/missing_validators)
5
5
 
6
6
  MissingValidators is a collection of custom validators that are often required in Rails applications plus shoulda-style RSpec matchers to test the validation rules.
7
7
 
@@ -143,6 +143,100 @@ RSpec matcher is also available for your convenience:
143
143
  it { should ensure_valid_mac_address_format_of }
144
144
  end
145
145
 
146
+ ### ColorValidator
147
+
148
+ Ensures that the color is a hexadecimal value starting with '#':
149
+
150
+ With an ActiveRecord model:
151
+
152
+ class Widget < ActiveRecord::Base
153
+ attr_accessor :color
154
+ validates :color, color: true
155
+ end
156
+
157
+ Or any ruby class:
158
+
159
+ class Widget
160
+ include ActiveModel::Validations
161
+ attr_accessor :color
162
+ validates :color, color: true
163
+ end
164
+
165
+ RSpec matcher is not available yet.
166
+
167
+ ### ImeiValidator
168
+
169
+ Ensures that IMEI is in one of the following formats:
170
+
171
+ '356843052637512'
172
+ '35-6843052-637512'
173
+ '35.6843052.637512'
174
+
175
+ and its check digit is correct.
176
+
177
+ With an ActiveRecord model:
178
+
179
+ class Phone < ActiveRecord::Base
180
+ attr_accessor :imei
181
+ validates :imei, imei: true
182
+ end
183
+
184
+ Or any ruby class:
185
+
186
+ class Phone
187
+ include ActiveModel::Validations
188
+ attr_accessor :imei
189
+ validates :imei, imei: true
190
+ end
191
+
192
+ RSpec matcher is also available for your convenience:
193
+
194
+ describe Phone do
195
+ it { should ensure_valid_imei_format_of }
196
+ end
197
+
198
+ ### LatitudeValidator
199
+
200
+ Ensures that the value is between -90 and 90:
201
+
202
+ With an ActiveRecord model:
203
+
204
+ class Coordinate < ActiveRecord::Base
205
+ attr_accessor :latitude
206
+ validates :latitude, latitude: true
207
+ end
208
+
209
+ Or any ruby class:
210
+
211
+ class Coordinate
212
+ include ActiveModel::Validations
213
+ attr_accessor :latitude
214
+ validates :latitude, latitude: true
215
+ end
216
+
217
+ RSpec matcher is not available yet.
218
+
219
+ ### LongitudeValidator
220
+
221
+ Ensures that the value is between -180 and 180:
222
+
223
+ With an ActiveRecord model:
224
+
225
+ class Coordinate < ActiveRecord::Base
226
+ attr_accessor :longitude
227
+ validates :longitude, longitude: true
228
+ end
229
+
230
+ Or any ruby class:
231
+
232
+ class Coordinate
233
+ include ActiveModel::Validations
234
+ attr_accessor :longitude
235
+ validates :longitude, longitude: true
236
+ end
237
+
238
+ RSpec matcher is not available yet.
239
+
146
240
  ## Contributing
147
241
 
148
242
  Your contribution is welcome.
@@ -3,6 +3,7 @@ en:
3
3
  messages:
4
4
  imei: "is not a valid IMEI"
5
5
  inequality: "cannot be equal to %{attr}"
6
+ equality: "must be equal to %{attr}"
6
7
  email: "is not a valid email address"
7
8
  url: "is not a valid URL"
8
9
  mac_address: "is not a valid MAC address"
@@ -14,6 +15,9 @@ en:
14
15
  ensure_inequality_of:
15
16
  failure_message_for_should: "#{model} should ensure inequality on attribute #{attr}"
16
17
  failure_message_for_should_not: "#{model} should not ensure inequality on attribute #{attr}"
18
+ ensure_equality_of:
19
+ failure_message_for_should: "#{model} should ensure equality on attribute #{attr}"
20
+ failure_message_for_should_not: "#{model} should not ensure equality on attribute #{attr}"
17
21
  ensure_valid_email_format_of:
18
22
  failure_message_for_should: "#{model} should ensure valid email format of attribute #{attr}"
19
23
  failure_message_for_should_not: "#{model} should not ensure valid email format of attribute #{attr}"
@@ -1,8 +1,11 @@
1
1
  require 'active_model'
2
2
  require 'rspec/matchers' if defined?(RSpec)
3
3
  require 'missing_validators/version'
4
+ require 'missing_validators/validators/base_validator'
4
5
  require 'missing_validators/validators/inequality_validator'
5
6
  require 'missing_validators/matchers/ensure_inequality_of_matcher' if defined?(RSpec)
7
+ require 'missing_validators/validators/equality_validator'
8
+ require 'missing_validators/matchers/ensure_equality_of_matcher' if defined?(RSpec)
6
9
  require 'missing_validators/validators/email_validator'
7
10
  require 'missing_validators/matchers/ensure_valid_email_format_of' if defined?(RSpec)
8
11
  require 'missing_validators/validators/url_validator'
@@ -0,0 +1,27 @@
1
+ RSpec::Matchers.define :ensure_equality_of do |attribute|
2
+ chain :to do |to|
3
+ @to = to
4
+ end
5
+
6
+ match do |model|
7
+ raise Exception if @to.nil?
8
+
9
+ value = model.send(attribute)
10
+ model.send("#{@to}=", !!value)
11
+ model.valid?
12
+
13
+ if model.errors.has_key?(attribute)
14
+ model.errors[attribute].include?(I18n.t('errors.messages.equality', attr: @to))
15
+ end
16
+ end
17
+
18
+ failure_message do |model|
19
+ I18n.t 'missing_validators.matchers.ensure_equality_of.failure_message_for_should',
20
+ model: model.class, attr: attribute.inspect
21
+ end
22
+
23
+ failure_message_when_negated do |model|
24
+ I18n.t 'missing_validators.matchers.ensure_equality_of.failure_message_for_should_not',
25
+ model: model.class, attr: attribute.inspect
26
+ end
27
+ end
@@ -0,0 +1,19 @@
1
+ # Base class for most validators in the gem.
2
+ #
3
+ class BaseValidator < ActiveModel::EachValidator
4
+ def validate_each(record, attribute, value)
5
+ allow_blank = options[:allow_blank] || false
6
+ return if allow_blank && value.blank?
7
+
8
+ unless self.class.valid?(value, options)
9
+ key = self.class.name.underscore.split('_').reverse.drop(1).reverse.join('_')
10
+ record.errors[attribute] << (options[:message] || I18n.t("errors.messages.#{key}"))
11
+ end
12
+ end
13
+
14
+ private
15
+
16
+ def self.valid?(color, options)
17
+ raise NotImplementedError
18
+ end
19
+ end
@@ -5,29 +5,14 @@
5
5
  # attr_accessor :color
6
6
  # validates :color, color: true
7
7
  # end
8
- class ColorValidator < ActiveModel::EachValidator
9
- # Checks if an attribute value is a valid hex color.
10
- #
11
- # @param [Object] record object to validate
12
- # @param [String] attribute name of the object attribute to validate
13
- # @param [Object] value attribute value
14
- def validate_each(record, attribute, value)
15
- allow_blank = options[:allow_blank] || false
16
- return if allow_blank && value.blank?
17
-
18
- unless valid?(value, options)
19
- record.errors[attribute] << (options[:message] || I18n.t('errors.messages.color'))
20
- end
21
- end
22
-
8
+ class ColorValidator < BaseValidator
23
9
  def self.validate_format(color)
24
10
  !!(color =~ /^#(?:[0-9a-f]{3})(?:[0-9a-f]{3})?$/i)
25
11
  end
26
12
 
27
13
  private
28
14
 
29
- def valid?(color, options)
30
- self.class.validate_format(color)
15
+ def self.valid?(color, options)
16
+ validate_format(color)
31
17
  end
32
-
33
18
  end
@@ -5,21 +5,7 @@
5
5
  # attr_accessor :email, :name
6
6
  # validates :email, email: true
7
7
  # end
8
- class EmailValidator < ActiveModel::EachValidator
9
- # Checks if an attribute value is a valid email address.
10
- #
11
- # @param [Object] record object to validate
12
- # @param [String] attribute name of the object attribute to validate
13
- # @param [Object] value attribute value
14
- def validate_each(record, attribute, value)
15
- allow_blank = options[:allow_blank] || false
16
- return if allow_blank && value.blank?
17
-
18
- unless valid?(value, options)
19
- record.errors[attribute] << (options[:message] || I18n.t('errors.messages.email'))
20
- end
21
- end
22
-
8
+ class EmailValidator < BaseValidator
23
9
  def self.validate_format(email)
24
10
  !!(email =~ /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i)
25
11
  end
@@ -31,9 +17,8 @@ class EmailValidator < ActiveModel::EachValidator
31
17
 
32
18
  private
33
19
 
34
- def valid?(email, options)
35
- self.class.validate_format(email) \
36
- && self.class.validate_domain(email, [*(options[:domain])])
20
+ def self.valid?(email, options)
21
+ validate_format(email) \
22
+ && validate_domain(email, [*(options[:domain])])
37
23
  end
38
-
39
24
  end
@@ -0,0 +1,24 @@
1
+ # Allows to check if the value of a specific attribute is equal to
2
+ # the value of another attribute of an object.
3
+ #
4
+ class EqualityValidator < ActiveModel::EachValidator
5
+ # Checks if an attribute value is unequal to another attrubute value.
6
+ #
7
+ # @param [Object] record object to validate
8
+ # @param [String] attribute name of the object attribute to validate
9
+ # @param [Object] value attribute value
10
+ def validate_each(record, attribute, value)
11
+ equal_to = options[:to]
12
+
13
+ equal_to_value = if equal_to.respond_to?(:call)
14
+ options[:to].call(record)
15
+ else
16
+ record.send(equal_to.to_sym)
17
+ end
18
+
19
+ if equal_to.present? && value != equal_to_value
20
+ message = options[:message] || I18n.t('errors.messages.equality', attr: equal_to)
21
+ record.errors[attribute] << message
22
+ end
23
+ end
24
+ end
@@ -5,21 +5,7 @@
5
5
  # attr_accessor :imei
6
6
  # validates :imei, imei: true
7
7
  # end
8
- class ImeiValidator < ActiveModel::EachValidator
9
- # Checks if an attribute value is a valid IMEI address.
10
- #
11
- # @param [Object] record object to validate
12
- # @param [String] attribute name of the object attribute to validate
13
- # @param [Object] value attribute value
14
- def validate_each(record, attribute, value)
15
- allow_blank = options[:allow_blank] || false
16
- return if allow_blank && value.blank?
17
-
18
- unless valid?(value.to_s, options)
19
- record.errors[attribute] << (options[:message] || I18n.t('errors.messages.imei'))
20
- end
21
- end
22
-
8
+ class ImeiValidator < BaseValidator
23
9
  def self.validate_format(imei_number)
24
10
  !!(imei_number =~ /\A[\d\.\:\-\s]+\z/i) # 356843052637512 or 35-6843052-637512 or 35.6843052.637512
25
11
  end
@@ -43,8 +29,8 @@ class ImeiValidator < ActiveModel::EachValidator
43
29
 
44
30
  private
45
31
 
46
- def valid?(imei, options)
47
- self.class.validate_format(imei) \
48
- && self.class.luhn_valid?(imei)
32
+ def self.valid?(imei, options)
33
+ validate_format(imei.to_s) \
34
+ && luhn_valid?(imei.to_s)
49
35
  end
50
36
  end
@@ -13,10 +13,16 @@ class InequalityValidator < ActiveModel::EachValidator
13
13
  # @param [String] attribute name of the object attribute to validate
14
14
  # @param [Object] value attribute value
15
15
  def validate_each(record, attribute, value)
16
- unequal_to_attr = options[:to]
16
+ unequal_to = options[:to]
17
17
 
18
- if unequal_to_attr.present? && value == record.send(unequal_to_attr.to_sym)
19
- message = options[:message] || I18n.t('errors.messages.inequality', attr: unequal_to_attr)
18
+ unequal_to_value = if unequal_to.respond_to?(:call)
19
+ options[:to].call(record)
20
+ else
21
+ record.send(unequal_to.to_sym)
22
+ end
23
+
24
+ if unequal_to.present? && value == unequal_to_value
25
+ message = options[:message] || I18n.t('errors.messages.inequality', attr: unequal_to)
20
26
  record.errors[attribute] << message
21
27
  end
22
28
  end
@@ -5,25 +5,10 @@
5
5
  # attr_accessor :lat
6
6
  # validates :lat, latitude: true
7
7
  # end
8
- class LatitudeValidator < ActiveModel::EachValidator
9
- # Checks if an attribute value is a valid MAC address.
10
- #
11
- # @param [Object] record object to validate
12
- # @param [String] attribute name of the object attribute to validate
13
- # @param [Object] value attribute value
14
- def validate_each(record, attribute, value)
15
- allow_blank = options[:allow_blank] || false
16
- return if allow_blank && value.blank?
17
-
18
- unless self.class.valid?(value, options)
19
- record.errors[attribute] << (options[:message] || I18n.t('errors.messages.latitude'))
20
- end
21
- end
22
-
8
+ class LatitudeValidator < BaseValidator
23
9
  private
24
10
 
25
11
  def self.valid?(latitude, options)
26
12
  latitude.present? && latitude >= -90 && latitude <= 90
27
13
  end
28
-
29
14
  end
@@ -5,25 +5,10 @@
5
5
  # attr_accessor :lon
6
6
  # validates :lon, longitude: true
7
7
  # end
8
- class LongitudeValidator < ActiveModel::EachValidator
9
- # Checks if an attribute value is a valid MAC address.
10
- #
11
- # @param [Object] record object to validate
12
- # @param [String] attribute name of the object attribute to validate
13
- # @param [Object] value attribute value
14
- def validate_each(record, attribute, value)
15
- allow_blank = options[:allow_blank] || false
16
- return if allow_blank && value.blank?
17
-
18
- unless self.class.valid?(value, options)
19
- record.errors[attribute] << (options[:message] || I18n.t('errors.messages.longitude'))
20
- end
21
- end
22
-
8
+ class LongitudeValidator < BaseValidator
23
9
  private
24
10
 
25
11
  def self.valid?(longitude, options)
26
12
  longitude.present? && longitude >= -180 && longitude <= 180
27
13
  end
28
-
29
14
  end
@@ -5,21 +5,7 @@
5
5
  # attr_accessor :mac
6
6
  # validates :mac, mac_address: true
7
7
  # end
8
- class MacAddressValidator < ActiveModel::EachValidator
9
- # Checks if an attribute value is a valid MAC address.
10
- #
11
- # @param [Object] record object to validate
12
- # @param [String] attribute name of the object attribute to validate
13
- # @param [Object] value attribute value
14
- def validate_each(record, attribute, value)
15
- allow_blank = options[:allow_blank] || false
16
- return if allow_blank && value.blank?
17
-
18
- unless self.class.valid?(value, options)
19
- record.errors[attribute] << (options[:message] || I18n.t('errors.messages.mac_address'))
20
- end
21
- end
22
-
8
+ class MacAddressValidator < BaseValidator
23
9
  def self.validate_format(mac_address)
24
10
  !!(mac_address =~ /^([\h]{2}:){5}[\h]{2}?$/i) || # 08:00:2b:01:02:03
25
11
  !!(mac_address =~ /^([\h]{2}[-|\.|\s]){5}[\h]{2}?$/i) || # 08-00-2b-01-02-03 or 08.00.2b.01.02.03
@@ -34,5 +20,4 @@ class MacAddressValidator < ActiveModel::EachValidator
34
20
  def self.valid?(mac_address, options)
35
21
  validate_format(mac_address)
36
22
  end
37
-
38
23
  end
@@ -43,5 +43,4 @@ class UrlValidator < ActiveModel::EachValidator
43
43
  && self.class.validate_scheme(uri, [*(options[:scheme] || UrlValidator::DEFAULT_SCHEMES)]) \
44
44
  && (!!options[:root] ? self.class.validate_root(uri) : true)
45
45
  end
46
-
47
46
  end
@@ -1,5 +1,5 @@
1
1
  # Provides a collection of custom validators that are often required in Rails applications.
2
2
  module MissingValidators
3
3
  # Gem version.
4
- VERSION = "1.0.1"
4
+ VERSION = "1.1.0"
5
5
  end
@@ -21,4 +21,5 @@ Gem::Specification.new do |gem|
21
21
 
22
22
  gem.add_development_dependency 'rspec'
23
23
  gem.add_development_dependency 'shoulda-matchers'
24
+ gem.add_development_dependency 'codeclimate-test-reporter'
24
25
  end
data/spec/spec_helper.rb CHANGED
@@ -1,3 +1,6 @@
1
+ require 'codeclimate-test-reporter'
2
+ CodeClimate::TestReporter.start
3
+
1
4
  require 'missing_validators'
2
5
  require 'shoulda/matchers/active_record'
3
6
  require 'shoulda-matchers'
@@ -0,0 +1,69 @@
1
+ require 'spec_helper'
2
+
3
+ describe EqualityValidator do
4
+
5
+ describe do
6
+ let(:klass) do
7
+ Class.new do
8
+ include ActiveModel::Validations
9
+ attr_accessor :attr
10
+ validates :attr, equality: { to: Proc.new { |o| 'valid value' } }
11
+ end
12
+ end
13
+
14
+ subject(:model){ klass.new }
15
+
16
+ specify "field is not the same as the result of the validating proc" do
17
+ model.attr = "invalid value"
18
+ expect(model).to be_invalid
19
+ end
20
+
21
+ specify "field is the same as the result of the validating proc" do
22
+ model.attr = "valid value"
23
+ expect(model).to be_valid
24
+ end
25
+ end
26
+
27
+ describe do
28
+ let(:klass) do
29
+ Class.new do
30
+ include ActiveModel::Validations
31
+ attr_accessor :origin, :destination, :airline
32
+ validates :origin, equality: { to: :destination }
33
+ end
34
+ end
35
+
36
+ subject(:model){ klass.new }
37
+
38
+ it { should ensure_equality_of(:origin).to(:destination) }
39
+ it { should_not ensure_equality_of(:origin).to(:airline) }
40
+
41
+ specify "both fields have same values" do
42
+ model.origin = model.destination = "MOW"
43
+ expect(model).to be_valid
44
+ end
45
+
46
+ specify "fields have different value" do
47
+ model.origin = "NYC"
48
+ model.destination = "MOW"
49
+ expect(model).to be_invalid
50
+ end
51
+
52
+ specify "first field has value, the second is nil" do
53
+ model.origin = "NYC"
54
+ model.destination = nil
55
+ expect(model).to be_invalid
56
+ end
57
+
58
+ specify "first field is nil, the second has value" do
59
+ model.origin = nil
60
+ model.destination = "NYC"
61
+ expect(model).to be_invalid
62
+ end
63
+
64
+ specify "both fields are nil" do
65
+ model.origin = model.destination = nil
66
+ expect(model).to be_valid
67
+ end
68
+ end
69
+ end
@@ -1,44 +1,68 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe InequalityValidator do
4
- let(:klass) do
5
- Class.new do
6
- include ActiveModel::Validations
7
- attr_accessor :origin, :destination, :airline
8
- validates :origin, inequality: { to: :destination }
4
+ describe do
5
+ let(:klass) do
6
+ Class.new do
7
+ include ActiveModel::Validations
8
+ attr_accessor :attr
9
+ validates :attr, inequality: { to: Proc.new { |o| "invalid value" } }
10
+ end
9
11
  end
10
- end
11
12
 
12
- subject(:model){ klass.new }
13
+ subject(:model){ klass.new }
13
14
 
14
- it { should ensure_inequality_of(:origin).to(:destination) }
15
- it { should_not ensure_inequality_of(:origin).to(:airline) }
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
16
19
 
17
- specify "both fields have same values" do
18
- model.origin = model.destination = "MOW"
19
- expect(model).to be_invalid
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
20
24
  end
21
25
 
22
- specify "fields have different value" do
23
- model.origin = "NYC"
24
- model.destination = "MOW"
25
- expect(model).to be_valid
26
- end
26
+ describe do
27
+ let(:klass) do
28
+ Class.new do
29
+ include ActiveModel::Validations
30
+ attr_accessor :origin, :destination, :airline
31
+ validates :origin, inequality: { to: :destination }
32
+ end
33
+ end
27
34
 
28
- specify "first field has value, the second is nil" do
29
- model.origin = "NYC"
30
- model.destination = nil
31
- expect(model).to be_valid
32
- end
35
+ subject(:model){ klass.new }
33
36
 
34
- specify "first field is nil, the second has value" do
35
- model.origin = nil
36
- model.destination = "NYC"
37
- expect(model).to be_valid
38
- end
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"
42
+ expect(model).to be_invalid
43
+ end
44
+
45
+ specify "fields have different value" do
46
+ model.origin = "NYC"
47
+ model.destination = "MOW"
48
+ expect(model).to be_valid
49
+ end
50
+
51
+ specify "first field has value, the second is nil" do
52
+ model.origin = "NYC"
53
+ model.destination = nil
54
+ expect(model).to be_valid
55
+ end
56
+
57
+ specify "first field is nil, the second has value" do
58
+ model.origin = nil
59
+ model.destination = "NYC"
60
+ expect(model).to be_valid
61
+ end
39
62
 
40
- specify "both fields are nil" do
41
- model.origin = model.destination = nil
42
- expect(model).to be_invalid
63
+ specify "both fields are nil" do
64
+ model.origin = model.destination = nil
65
+ expect(model).to be_invalid
66
+ end
43
67
  end
44
68
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: missing_validators
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrei Gridnev
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-06-02 00:00:00.000000000 Z
11
+ date: 2014-10-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel
@@ -66,6 +66,20 @@ dependencies:
66
66
  - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: codeclimate-test-reporter
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
69
83
  description: Validates email addresses, URLs, IMEI, MAC addresses, latitude, longitude,
70
84
  hex colors and inequality of attributes.
71
85
  email:
@@ -83,13 +97,16 @@ files:
83
97
  - Rakefile
84
98
  - config/locales/en.yml
85
99
  - lib/missing_validators.rb
100
+ - lib/missing_validators/matchers/ensure_equality_of_matcher.rb
86
101
  - lib/missing_validators/matchers/ensure_inequality_of_matcher.rb
87
102
  - lib/missing_validators/matchers/ensure_valid_email_format_of.rb
88
103
  - lib/missing_validators/matchers/ensure_valid_imei_format_of.rb
89
104
  - lib/missing_validators/matchers/ensure_valid_mac_address_format_of.rb
90
105
  - lib/missing_validators/matchers/ensure_valid_url_format_of.rb
106
+ - lib/missing_validators/validators/base_validator.rb
91
107
  - lib/missing_validators/validators/color_validator.rb
92
108
  - lib/missing_validators/validators/email_validator.rb
109
+ - lib/missing_validators/validators/equality_validator.rb
93
110
  - lib/missing_validators/validators/imei_validator.rb
94
111
  - lib/missing_validators/validators/inequality_validator.rb
95
112
  - lib/missing_validators/validators/latitude_validator.rb
@@ -101,6 +118,7 @@ files:
101
118
  - spec/spec_helper.rb
102
119
  - spec/validators/color_validator_spec.rb
103
120
  - spec/validators/email_validator_spec.rb
121
+ - spec/validators/equality_validator_spec.rb
104
122
  - spec/validators/imei_spec.rb
105
123
  - spec/validators/inequality_validator_spec.rb
106
124
  - spec/validators/latitude_validator_spec.rb
@@ -135,6 +153,7 @@ test_files:
135
153
  - spec/spec_helper.rb
136
154
  - spec/validators/color_validator_spec.rb
137
155
  - spec/validators/email_validator_spec.rb
156
+ - spec/validators/equality_validator_spec.rb
138
157
  - spec/validators/imei_spec.rb
139
158
  - spec/validators/inequality_validator_spec.rb
140
159
  - spec/validators/latitude_validator_spec.rb