attr_validator 0.0.1

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 (40) hide show
  1. data/.gitignore +4 -0
  2. data/.travis.yml +4 -0
  3. data/Gemfile +9 -0
  4. data/Gemfile.lock +37 -0
  5. data/LICENSE.txt +22 -0
  6. data/README.md +119 -0
  7. data/Rakefile +1 -0
  8. data/attr_validator.gemspec +24 -0
  9. data/lib/attr_validator/args_validator.rb +118 -0
  10. data/lib/attr_validator/concern.rb +136 -0
  11. data/lib/attr_validator/core_extensions/class_attribute.rb +143 -0
  12. data/lib/attr_validator/errors.rb +23 -0
  13. data/lib/attr_validator/i18n.rb +7 -0
  14. data/lib/attr_validator/locales/en.yml +23 -0
  15. data/lib/attr_validator/validation_errors.rb +245 -0
  16. data/lib/attr_validator/validator.rb +148 -0
  17. data/lib/attr_validator/validators/email_validator.rb +48 -0
  18. data/lib/attr_validator/validators/exclusion_validator.rb +23 -0
  19. data/lib/attr_validator/validators/inclusion_validator.rb +28 -0
  20. data/lib/attr_validator/validators/length_validator.rb +32 -0
  21. data/lib/attr_validator/validators/not_nil_validator.rb +25 -0
  22. data/lib/attr_validator/validators/numericality_validator.rb +39 -0
  23. data/lib/attr_validator/validators/presence_validator.rb +26 -0
  24. data/lib/attr_validator/validators/regexp_validator.rb +21 -0
  25. data/lib/attr_validator/validators/url_validator.rb +25 -0
  26. data/lib/attr_validator/validators.rb +11 -0
  27. data/lib/attr_validator/version.rb +3 -0
  28. data/lib/attr_validator.rb +41 -0
  29. data/spec/attr_validator/validator_spec.rb +105 -0
  30. data/spec/attr_validator/validators/email_validator_spec.rb +24 -0
  31. data/spec/attr_validator/validators/exclusion_validator_spec.rb +24 -0
  32. data/spec/attr_validator/validators/inclusion_validator_spec.rb +24 -0
  33. data/spec/attr_validator/validators/length_validator_spec.rb +39 -0
  34. data/spec/attr_validator/validators/not_nil_validator_spec.rb +25 -0
  35. data/spec/attr_validator/validators/numericality_validator_spec.rb +50 -0
  36. data/spec/attr_validator/validators/presence_validator_spec.rb +25 -0
  37. data/spec/attr_validator/validators/regexp_validator_spec.rb +24 -0
  38. data/spec/attr_validator/validators/url_validator_spec.rb +24 -0
  39. data/spec/spec_helper.rb +7 -0
  40. metadata +145 -0
@@ -0,0 +1,41 @@
1
+ require 'i18n'
2
+ require 'attr_validator/core_extensions/class_attribute'
3
+ require 'attr_validator/concern'
4
+ require 'attr_validator/version'
5
+ require 'attr_validator/errors'
6
+ require 'attr_validator/args_validator'
7
+ require 'attr_validator/validator'
8
+ require 'attr_validator/i18n'
9
+ require 'attr_validator/validators'
10
+ require 'attr_validator/validation_errors'
11
+
12
+ module AttrValidator
13
+ @@validators = {}
14
+
15
+ # Returns list of defined validators
16
+ def self.validators
17
+ @@validators
18
+ end
19
+
20
+ # Adds new validator to AttrValidator
21
+ # @param validator_name [Symbol] validator name
22
+ # @param validator [.validate, .validation_options] validator
23
+ def self.add_validator(validator_name, validator)
24
+ @@validators[validator_name] = validator
25
+ end
26
+ end
27
+
28
+ AttrValidator.add_validator(:email, AttrValidator::Validators::EmailValidator)
29
+ AttrValidator.add_validator(:exclusion, AttrValidator::Validators::ExclusionValidator)
30
+ AttrValidator.add_validator(:inclusion, AttrValidator::Validators::InclusionValidator)
31
+ AttrValidator.add_validator(:length, AttrValidator::Validators::LengthValidator)
32
+ AttrValidator.add_validator(:numericality, AttrValidator::Validators::NumericalityValidator)
33
+ AttrValidator.add_validator(:presence, AttrValidator::Validators::PresenceValidator)
34
+ AttrValidator.add_validator(:not_blank, AttrValidator::Validators::PresenceValidator)
35
+ AttrValidator.add_validator(:not_nil, AttrValidator::Validators::NotNilValidator)
36
+ AttrValidator.add_validator(:regexp, AttrValidator::Validators::RegexpValidator)
37
+ AttrValidator.add_validator(:url, AttrValidator::Validators::UrlValidator)
38
+
39
+ # I18n settings
40
+ I18n.load_path = Dir['lib/attr_validator/locales/*.yml']
41
+ I18n.default_locale = :en
@@ -0,0 +1,105 @@
1
+ require 'spec_helper'
2
+ require 'attr_validator'
3
+
4
+ describe AttrValidator::Validator do
5
+ describe "#validate" do
6
+ class Contact
7
+ attr_accessor :first_name, :last_name, :position, :age, :type, :email, :color, :status, :stage, :description, :companies
8
+ end
9
+ class Company
10
+ attr_accessor :name
11
+ end
12
+
13
+ class CompanyValidator
14
+ include AttrValidator::Validator
15
+
16
+ validates :name, presence: true, length: { min: 3, max: 9 }
17
+ end
18
+
19
+ class ContactValidator
20
+ include AttrValidator::Validator
21
+
22
+ validates :first_name, presence: true, length: { min: 4, max: 7 }
23
+ validates :last_name, length: { equal_to: 5 }
24
+ validates :position, length: { not_equal_to: 5 }
25
+ validates :age, numericality: { greater_than: 0, less_than: 150 }
26
+ validates :type, numericality: { greater_than_or_equal_to: 1, less_than_or_equal_to: 5 }
27
+ validates :email, email: true
28
+ validates :color, regexp: /#\w{6}/
29
+ validates :status, inclusion: { in: [:new, :lead] }
30
+ validates :stage, exclusion: { in: [:wrong, :bad] }
31
+
32
+ validate_associated :companies, validator: CompanyValidator
33
+
34
+ validate :check_description
35
+
36
+ def check_description(entity, errors)
37
+ if entity.description.nil?
38
+ errors.add(:description, "can't be empty")
39
+ end
40
+ end
41
+ end
42
+
43
+ it "should return empty errors if object is valid" do
44
+ contact = Contact.new
45
+ contact.first_name = "John"
46
+ contact.last_name = "Smith"
47
+ contact.position = "Team Lead"
48
+ contact.age = 35
49
+ contact.type = 2
50
+ contact.email = "johh.smith@example.com"
51
+ contact.color = "#DDD333"
52
+ contact.status = :lead
53
+ contact.stage = :good
54
+ contact.description = "good guy"
55
+
56
+ company1 = Company.new
57
+ company1.name = 'DroidLabs'
58
+ company2 = Company.new
59
+ company2.name = 'ICL'
60
+
61
+ contact.companies = [company1, company2]
62
+
63
+ errors = ContactValidator.new.validate(contact)
64
+ errors.should be_empty
65
+ end
66
+
67
+ it "should return validation errors if object is invalid" do
68
+ contact = Contact.new
69
+ contact.first_name = nil
70
+ contact.last_name = "Sm"
71
+ contact.position = "develp"
72
+ contact.age = -1
73
+ contact.type = 7
74
+ contact.email = "johh.com"
75
+ contact.color = "DDD333"
76
+ contact.status = :left
77
+ contact.stage = :bad
78
+
79
+ company1 = Company.new
80
+ company1.name = 'DroidLabs Wrong'
81
+ company2 = Company.new
82
+ company2.name = 'IC'
83
+
84
+ contact.companies = [company1, company2]
85
+
86
+ errors = ContactValidator.new.validate(contact)
87
+ errors.should == {
88
+ first_name: ["can not be blank"],
89
+ last_name: ["should be equal to 5"],
90
+ age: ["should be greater than 0"],
91
+ type: ["should be less than or equal to 5"],
92
+ email: ["invalid email"],
93
+ color: ["does not match defined format"],
94
+ status: ["should be included in [:new, :lead]"],
95
+ stage: ["should not be included in [:wrong, :bad]"],
96
+ description: ["can't be empty"],
97
+ companies_errors: [
98
+ { name: ["can not be more than 9"] },
99
+ { name: ["can not be less than 3"] },
100
+ ]
101
+ }
102
+ end
103
+ end
104
+
105
+ end
@@ -0,0 +1,24 @@
1
+ require 'spec_helper'
2
+ require 'attr_validator'
3
+
4
+ describe AttrValidator::Validators::EmailValidator do
5
+ describe ".validate" do
6
+ it "should return empty errors if email is valid" do
7
+ errors = AttrValidator::Validators::EmailValidator.validate('test@example.com', true)
8
+ errors.should be_empty
9
+ end
10
+
11
+ it "should return errors if value is invalid" do
12
+ errors = AttrValidator::Validators::EmailValidator.validate('test@asdffd', true)
13
+ errors.should == ["invalid email"]
14
+ end
15
+ end
16
+
17
+ describe ".validate_options" do
18
+ it "should raise error if validation attributes are invalid" do
19
+ lambda do
20
+ AttrValidator::Validators::EmailValidator.validate_options("asdf")
21
+ end.should raise_error("validation_rule should be a Boolean")
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,24 @@
1
+ require 'spec_helper'
2
+ require 'attr_validator'
3
+
4
+ describe AttrValidator::Validators::ExclusionValidator do
5
+ describe ".validate" do
6
+ it "should return empty errors if value is valid" do
7
+ errors = AttrValidator::Validators::ExclusionValidator.validate(:wrong_type, in: [:new, :old, :medium])
8
+ errors.should be_empty
9
+ end
10
+
11
+ it "should return errors if value is invalid" do
12
+ errors = AttrValidator::Validators::ExclusionValidator.validate(:new, in: [:new, :old, :medium])
13
+ errors.should == ["should not be included in [:new, :old, :medium]"]
14
+ end
15
+ end
16
+
17
+ describe ".validate_options" do
18
+ it "should raise error if validation attributes are invalid" do
19
+ lambda do
20
+ AttrValidator::Validators::ExclusionValidator.validate_options(wrong_option: false)
21
+ end.should raise_error("validation_rule has unacceptable options [:wrong_option]")
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,24 @@
1
+ require 'spec_helper'
2
+ require 'attr_validator'
3
+
4
+ describe AttrValidator::Validators::InclusionValidator do
5
+ describe ".validate" do
6
+ it "should return empty errors if value is valid" do
7
+ errors = AttrValidator::Validators::InclusionValidator.validate(:old, in: [:new, :old, :medium])
8
+ errors.should be_empty
9
+ end
10
+
11
+ it "should return errors if value is invalid" do
12
+ errors = AttrValidator::Validators::InclusionValidator.validate(:wrong_type, in: [:new, :old, :medium])
13
+ errors.should == ["should be included in [:new, :old, :medium]"]
14
+ end
15
+ end
16
+
17
+ describe ".validate_options" do
18
+ it "should raise error if validation attributes are invalid" do
19
+ lambda do
20
+ AttrValidator::Validators::InclusionValidator.validate_options(wrong_option: false)
21
+ end.should raise_error("validation options has unacceptable options [:wrong_option]")
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,39 @@
1
+ require 'spec_helper'
2
+ require 'attr_validator'
3
+
4
+ describe AttrValidator::Validators::LengthValidator do
5
+ describe ".validate" do
6
+ it "should return empty errors if text has valid length" do
7
+ errors = AttrValidator::Validators::LengthValidator.validate('home', max: 5, min: 3)
8
+ errors.should be_empty
9
+ end
10
+
11
+ it "should return errors if value has invalid max length" do
12
+ errors = AttrValidator::Validators::LengthValidator.validate('long title', max: 5)
13
+ errors.should == ["can not be more than 5"]
14
+ end
15
+
16
+ it "should return errors if value has invalid min length" do
17
+ errors = AttrValidator::Validators::LengthValidator.validate('ya', min: 3)
18
+ errors.should == ["can not be less than 3"]
19
+ end
20
+
21
+ it "should return errors if value has invalid equal_to length" do
22
+ errors = AttrValidator::Validators::LengthValidator.validate('ya', equal_to: 3)
23
+ errors.should == ["should be equal to 3"]
24
+ end
25
+
26
+ it "should return errors if value has invalid not_equal_to length" do
27
+ errors = AttrValidator::Validators::LengthValidator.validate('yad', not_equal_to: 3)
28
+ errors.should == ["should not be equal to 3"]
29
+ end
30
+ end
31
+
32
+ describe ".validate_options" do
33
+ it "should raise error if validation attributes are invalid" do
34
+ lambda do
35
+ AttrValidator::Validators::LengthValidator.validate_options(max: 5, wrong_attr: 3)
36
+ end.should raise_error("validation_rule has unacceptable options [:wrong_attr]")
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,25 @@
1
+ require 'spec_helper'
2
+ require 'attr_validator'
3
+
4
+ describe AttrValidator::Validators::NotNilValidator do
5
+ describe ".validate" do
6
+ it "should return empty errors if object is not nil" do
7
+ errors = AttrValidator::Validators::NotNilValidator.validate('home', true)
8
+ errors.should be_empty
9
+ end
10
+
11
+ it "should return errors if object is nil" do
12
+ errors = AttrValidator::Validators::NotNilValidator.validate(nil, true)
13
+ errors.should == ["can not be nil"]
14
+ end
15
+ end
16
+
17
+ describe ".validate_options" do
18
+ it "should raise error if validation attributes are invalid" do
19
+ lambda do
20
+ AttrValidator::Validators::NotNilValidator.validate_options("asdf")
21
+ end.should raise_error("validation_rule should be a Boolean")
22
+ end
23
+ end
24
+
25
+ end
@@ -0,0 +1,50 @@
1
+ require 'spec_helper'
2
+ require 'attr_validator'
3
+
4
+ describe AttrValidator::Validators::NumericalityValidator do
5
+ describe ".validate" do
6
+ it "should return empty errors if number is valid" do
7
+ errors = AttrValidator::Validators::NumericalityValidator.validate(4, less_than: 5, greater_than: 3)
8
+ errors.should be_empty
9
+ end
10
+
11
+ it "should return errors if value is less than needed" do
12
+ errors = AttrValidator::Validators::NumericalityValidator.validate(5, greater_than: 5)
13
+ errors.should == ["should be greater than 5"]
14
+ end
15
+
16
+ it "should return errors if value is less than or equal to what needed" do
17
+ errors = AttrValidator::Validators::NumericalityValidator.validate(4, greater_than_or_equal_to: 5)
18
+ errors.should == ["should be greater than or equal to 5"]
19
+ end
20
+
21
+ it "should return errors if value is greater than needed" do
22
+ errors = AttrValidator::Validators::NumericalityValidator.validate(5, less_than: 5)
23
+ errors.should == ["should be less than 5"]
24
+ end
25
+
26
+ it "should return errors if value is greater than or equal to what needed" do
27
+ errors = AttrValidator::Validators::NumericalityValidator.validate(6, less_than_or_equal_to: 5)
28
+ errors.should == ["should be less than or equal to 5"]
29
+ end
30
+
31
+ it "should return errors if value is not even" do
32
+ errors = AttrValidator::Validators::NumericalityValidator.validate(7, even: true)
33
+ errors.should == ["should be even number"]
34
+ end
35
+
36
+ it "should return errors if value is not odd" do
37
+ errors = AttrValidator::Validators::NumericalityValidator.validate(6, odd: true)
38
+ errors.should == ["should be odd number"]
39
+ end
40
+
41
+ end
42
+
43
+ describe ".validate_options" do
44
+ it "should raise error if validation attributes are invalid" do
45
+ lambda do
46
+ AttrValidator::Validators::NumericalityValidator.validate_options(less_than: 5, wrong_attr: 3)
47
+ end.should raise_error("validation_rule has unacceptable options [:wrong_attr]")
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,25 @@
1
+ require 'spec_helper'
2
+ require 'attr_validator'
3
+
4
+ describe AttrValidator::Validators::PresenceValidator do
5
+ describe ".validate" do
6
+ it "should return empty errors if text is not blank" do
7
+ errors = AttrValidator::Validators::PresenceValidator.validate('home', true)
8
+ errors.should be_empty
9
+ end
10
+
11
+ it "should return errors if text is not specified" do
12
+ errors = AttrValidator::Validators::PresenceValidator.validate(" ", true)
13
+ errors.should == ["can not be blank"]
14
+ end
15
+ end
16
+
17
+ describe ".validate_options" do
18
+ it "should raise error if validation attributes are invalid" do
19
+ lambda do
20
+ AttrValidator::Validators::PresenceValidator.validate_options("asdf")
21
+ end.should raise_error("validation_rule should be a Boolean")
22
+ end
23
+ end
24
+
25
+ end
@@ -0,0 +1,24 @@
1
+ require 'spec_helper'
2
+ require 'attr_validator'
3
+
4
+ describe AttrValidator::Validators::RegexpValidator do
5
+ describe ".validate" do
6
+ it "should return empty errors if value is valid" do
7
+ errors = AttrValidator::Validators::RegexpValidator.validate('#aaa', /#\w{3,6}/)
8
+ errors.should be_empty
9
+ end
10
+
11
+ it "should return errors if value is invalid" do
12
+ errors = AttrValidator::Validators::RegexpValidator.validate('asdf', /#\w{3,6}/)
13
+ errors.should == ["does not match defined format"]
14
+ end
15
+ end
16
+
17
+ describe ".validate_options" do
18
+ it "should raise error if validation attributes are invalid" do
19
+ lambda do
20
+ AttrValidator::Validators::RegexpValidator.validate_options({})
21
+ end.should raise_error("validation_rule should be a String or Regexp")
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,24 @@
1
+ require 'spec_helper'
2
+ require 'attr_validator'
3
+
4
+ describe AttrValidator::Validators::UrlValidator do
5
+ describe ".validate" do
6
+ it "should return empty errors if email is valid" do
7
+ errors = AttrValidator::Validators::UrlValidator.validate('example.com', true)
8
+ errors.should be_empty
9
+ end
10
+
11
+ it "should return errors if value is invalid" do
12
+ errors = AttrValidator::Validators::UrlValidator.validate(':123asdffd.com', true)
13
+ errors.should == ["invalid url"]
14
+ end
15
+ end
16
+
17
+ describe ".validate_options" do
18
+ it "should raise error if validation attributes are invalid" do
19
+ lambda do
20
+ AttrValidator::Validators::UrlValidator.validate_options("asdf")
21
+ end.should raise_error("validation_rule should be a Boolean")
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,7 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+ require 'debugger'
4
+
5
+ RSpec.configure do |config|
6
+ config.color_enabled = true
7
+ end
metadata ADDED
@@ -0,0 +1,145 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: attr_validator
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.0.1
6
+ platform: ruby
7
+ authors:
8
+ - Albert Gazizov
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2014-02-24 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ version_requirements: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ! '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ none: false
21
+ name: i18n
22
+ type: :runtime
23
+ prerelease: false
24
+ requirement: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - ! '>='
27
+ - !ruby/object:Gem::Version
28
+ version: '0'
29
+ none: false
30
+ - !ruby/object:Gem::Dependency
31
+ version_requirements: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - ~>
34
+ - !ruby/object:Gem::Version
35
+ version: '1.3'
36
+ none: false
37
+ name: bundler
38
+ type: :development
39
+ prerelease: false
40
+ requirement: !ruby/object:Gem::Requirement
41
+ requirements:
42
+ - - ~>
43
+ - !ruby/object:Gem::Version
44
+ version: '1.3'
45
+ none: false
46
+ - !ruby/object:Gem::Dependency
47
+ version_requirements: !ruby/object:Gem::Requirement
48
+ requirements:
49
+ - - ! '>='
50
+ - !ruby/object:Gem::Version
51
+ version: '0'
52
+ none: false
53
+ name: rake
54
+ type: :development
55
+ prerelease: false
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ! '>='
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
61
+ none: false
62
+ description: Object validation library
63
+ email:
64
+ - deeper4k@gmail.com
65
+ executables: []
66
+ extensions: []
67
+ extra_rdoc_files: []
68
+ files:
69
+ - .gitignore
70
+ - .travis.yml
71
+ - Gemfile
72
+ - Gemfile.lock
73
+ - LICENSE.txt
74
+ - README.md
75
+ - Rakefile
76
+ - attr_validator.gemspec
77
+ - lib/attr_validator.rb
78
+ - lib/attr_validator/args_validator.rb
79
+ - lib/attr_validator/concern.rb
80
+ - lib/attr_validator/core_extensions/class_attribute.rb
81
+ - lib/attr_validator/errors.rb
82
+ - lib/attr_validator/i18n.rb
83
+ - lib/attr_validator/locales/en.yml
84
+ - lib/attr_validator/validation_errors.rb
85
+ - lib/attr_validator/validator.rb
86
+ - lib/attr_validator/validators.rb
87
+ - lib/attr_validator/validators/email_validator.rb
88
+ - lib/attr_validator/validators/exclusion_validator.rb
89
+ - lib/attr_validator/validators/inclusion_validator.rb
90
+ - lib/attr_validator/validators/length_validator.rb
91
+ - lib/attr_validator/validators/not_nil_validator.rb
92
+ - lib/attr_validator/validators/numericality_validator.rb
93
+ - lib/attr_validator/validators/presence_validator.rb
94
+ - lib/attr_validator/validators/regexp_validator.rb
95
+ - lib/attr_validator/validators/url_validator.rb
96
+ - lib/attr_validator/version.rb
97
+ - spec/attr_validator/validator_spec.rb
98
+ - spec/attr_validator/validators/email_validator_spec.rb
99
+ - spec/attr_validator/validators/exclusion_validator_spec.rb
100
+ - spec/attr_validator/validators/inclusion_validator_spec.rb
101
+ - spec/attr_validator/validators/length_validator_spec.rb
102
+ - spec/attr_validator/validators/not_nil_validator_spec.rb
103
+ - spec/attr_validator/validators/numericality_validator_spec.rb
104
+ - spec/attr_validator/validators/presence_validator_spec.rb
105
+ - spec/attr_validator/validators/regexp_validator_spec.rb
106
+ - spec/attr_validator/validators/url_validator_spec.rb
107
+ - spec/spec_helper.rb
108
+ homepage: http://github.com/AlbertGazizov/attr_validator
109
+ licenses:
110
+ - MIT
111
+ post_install_message:
112
+ rdoc_options: []
113
+ require_paths:
114
+ - lib
115
+ required_ruby_version: !ruby/object:Gem::Requirement
116
+ requirements:
117
+ - - ! '>='
118
+ - !ruby/object:Gem::Version
119
+ version: '0'
120
+ none: false
121
+ required_rubygems_version: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - ! '>='
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ none: false
127
+ requirements: []
128
+ rubyforge_project:
129
+ rubygems_version: 1.8.23
130
+ signing_key:
131
+ specification_version: 3
132
+ summary: Moves validation logic to validators
133
+ test_files:
134
+ - spec/attr_validator/validator_spec.rb
135
+ - spec/attr_validator/validators/email_validator_spec.rb
136
+ - spec/attr_validator/validators/exclusion_validator_spec.rb
137
+ - spec/attr_validator/validators/inclusion_validator_spec.rb
138
+ - spec/attr_validator/validators/length_validator_spec.rb
139
+ - spec/attr_validator/validators/not_nil_validator_spec.rb
140
+ - spec/attr_validator/validators/numericality_validator_spec.rb
141
+ - spec/attr_validator/validators/presence_validator_spec.rb
142
+ - spec/attr_validator/validators/regexp_validator_spec.rb
143
+ - spec/attr_validator/validators/url_validator_spec.rb
144
+ - spec/spec_helper.rb
145
+ has_rdoc: