activevalidators 1.0.0 → 1.0.2

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.
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ActiveValidators (1.0.0)
4
+ activevalidators (1.0.2)
5
5
  activemodel (>= 3.0.0)
6
6
  activerecord (>= 3.0.0)
7
7
  mail
@@ -46,9 +46,9 @@ PLATFORMS
46
46
  ruby
47
47
 
48
48
  DEPENDENCIES
49
- ActiveValidators!
50
49
  activemodel (>= 3.0.0)
51
50
  activerecord (>= 3.0.0)
51
+ activevalidators!
52
52
  bundler
53
53
  mail
54
54
  rspec
data/README.md CHANGED
@@ -22,14 +22,14 @@ Exhaustive list of supported validators:
22
22
 
23
23
  * `email` : checks the email based on the `mail` gem
24
24
  * `url` : checks the url based on a regular expression
25
-
25
+ * `phone` : checks the phone number based on a regular expression
26
26
 
27
27
  Todo
28
28
  ----
29
29
 
30
30
  Lots of improvements can be made:
31
31
 
32
- * Add I18n of error messages
32
+ * Add I18n specific types of error messages for each validator
33
33
  * Implement new validators
34
34
  * ...
35
35
 
@@ -4,7 +4,7 @@ $:.unshift lib unless $:.include?(lib)
4
4
 
5
5
  Gem::Specification.new do |s|
6
6
  s.name = "activevalidators"
7
- s.version = '1.0.0'
7
+ s.version = '1.0.2'
8
8
  s.platform = Gem::Platform::RUBY
9
9
  s.authors = ["Franck Verrot"]
10
10
  s.email = ["franck@verrot.fr"]
@@ -11,7 +11,7 @@ module ActiveModel
11
11
  rescue Exception => e
12
12
  r = false
13
13
  end
14
- record.errors[attribute] << (options[:message] || "is invalid") unless r
14
+ record.errors.add(attribute) unless r
15
15
  end
16
16
  end
17
17
  end
@@ -0,0 +1,11 @@
1
+ module ActiveModel
2
+ module Validations
3
+ class PhoneValidator < EachValidator
4
+ def validate_each(record, attribute, value)
5
+ unless value =~ /^\d{3}-\d{3}-\d{4}|\d{3}\.\d{3}\.\d{4}|\d{10}|\d{3}\s\d{3}\s\d{4}|\(\d{3}\)\s\d{3}-\d{4}$/i
6
+ record.errors.add(attribute)
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -6,7 +6,7 @@ module ActiveModel
6
6
  responders = options.dup
7
7
  RESERVED_OPTIONS.each do |opt,should_apply| responders.delete(opt) end
8
8
  responders.each do |method,dummy|
9
- record.errors[attribute] << (options[:message] || "is invalid") unless value.respond_to? method
9
+ record.errors.add(attribute) unless value.respond_to? method
10
10
  end
11
11
  end
12
12
  end
@@ -3,7 +3,7 @@ module ActiveModel
3
3
  class UrlValidator < EachValidator
4
4
  def validate_each(record, attribute, value)
5
5
  unless value =~ /^https?:\/\/(?i)[a-z0-9]+([-.]{1}[a-z0-9]+)*.[a-z]{2,5}(([0-9]{1,5})?\/.*)?$/
6
- record.errors[attribute] << (options[:message] || "is invalid")
6
+ record.errors.add(attribute)
7
7
  end
8
8
  end
9
9
  end
@@ -10,5 +10,6 @@ module ActiveModel
10
10
  autoload :EmailValidator
11
11
  autoload :UrlValidator
12
12
  autoload :RespondToValidator
13
+ autoload :PhoneValidator
13
14
  end
14
15
  end
@@ -0,0 +1,7 @@
1
+ module Models
2
+ class PhoneValidatorModel
3
+ include ActiveModel::Validations
4
+ attr_accessor :phone
5
+ validates :phone, :phone => true
6
+ end
7
+ end
@@ -4,14 +4,25 @@ describe "Email Validation" do
4
4
  it "accepts valid emails" do
5
5
  model = Models::EmailValidatorModel.new
6
6
  model.email = 'franck@verrot.fr'
7
- model.valid?.should == true
7
+ model.valid?.should be(true)
8
8
  model.should have(0).errors
9
9
  end
10
10
 
11
- it "rejected invalid emails" do
12
- model = Models::EmailValidatorModel.new
13
- model.email = 'franck.fr'
14
- model.valid?.should == false
15
- model.should have(1).errors
11
+ describe "for invalid emails" do
12
+ let(:model) do
13
+ Models::EmailValidatorModel.new.tap do |m|
14
+ m.email = 'franck.fr'
15
+ end
16
+ end
17
+
18
+ it "rejects invalid emails" do
19
+ model.valid?.should be(false)
20
+ model.should have(1).errors
21
+ end
22
+
23
+ it "generates an error message of type invalid" do
24
+ model.valid?.should be(false)
25
+ model.errors[:email].should == [model.errors.generate_message(:email, :invalid)]
26
+ end
16
27
  end
17
28
  end
@@ -0,0 +1,57 @@
1
+ require File.join(File.dirname(__FILE__), '..', 'spec_helper.rb')
2
+
3
+ describe "Phone Validation" do
4
+
5
+ it 'should validate format of phone with ###-###-####' do
6
+ model = Models::PhoneValidatorModel.new
7
+ model.phone = '999-999-9999'
8
+ model.valid?.should be(true)
9
+ model.should have(0).errors
10
+ end
11
+
12
+ it 'should validate format of phone with ##########' do
13
+ model = Models::PhoneValidatorModel.new
14
+ model.phone = '9999999999'
15
+ model.valid?.should be(true)
16
+ model.should have(0).errors
17
+ end
18
+
19
+ it 'should validate format of phone with ###.###.####' do
20
+ model = Models::PhoneValidatorModel.new
21
+ model.phone = '999.999.9999'
22
+ model.valid?.should be(true)
23
+ model.should have(0).errors
24
+ end
25
+
26
+ it 'should validate format of phone with ### ### ####' do
27
+ model = Models::PhoneValidatorModel.new
28
+ model.phone = '999 999 9999'
29
+ model.valid?.should be(true)
30
+ model.should have(0).errors
31
+ end
32
+
33
+ it 'should validate format of phone with (###) ###-####' do
34
+ model = Models::PhoneValidatorModel.new
35
+ model.phone = '(999) 999-9999'
36
+ model.valid?.should be(true)
37
+ model.should have(0).errors
38
+ end
39
+
40
+ describe "for invalid formats" do
41
+ let(:model) do
42
+ Models::PhoneValidatorModel.new.tap do |m|
43
+ m.phone = '999'
44
+ end
45
+ end
46
+
47
+ it "rejects invalid formats" do
48
+ model.valid?.should be(false)
49
+ model.should have(1).errors
50
+ end
51
+
52
+ it "generates an error message of type invalid" do
53
+ model.valid?.should be(false)
54
+ model.errors[:phone].should == [model.errors.generate_message(:phone, :invalid)]
55
+ end
56
+ end
57
+ end
@@ -7,17 +7,27 @@ describe "Respond To Validation" do
7
7
  model.global_condition = true
8
8
  model.local_condition = true
9
9
 
10
- model.valid?.should == true
10
+ model.valid?.should be(true)
11
11
  model.should have(0).errors
12
12
  end
13
13
 
14
- it "does not respond_to?" do
15
- model = Models::RespondToValidatorModel.new
16
- model.responder = 42
17
- model.global_condition = true
18
- model.local_condition = true
14
+ describe "when does not respond_to?" do
15
+ let(:model) do
16
+ Models::RespondToValidatorModel.new.tap do |m|
17
+ m.responder = 42
18
+ m.global_condition = true
19
+ m.local_condition = true
20
+ end
21
+ end
22
+
23
+ it "rejects the responder" do
24
+ model.valid?.should be(false)
25
+ model.should have(1).errors
26
+ end
19
27
 
20
- model.valid?.should == false
21
- model.should have(1).errors
28
+ it "generates an error message of type invalid" do
29
+ model.valid?.should be(false)
30
+ model.errors[:responder].should == [model.errors.generate_message(:responder, :invalid)]
31
+ end
22
32
  end
23
33
  end
@@ -8,10 +8,21 @@ describe "Url Validation" do
8
8
  model.should have(0).errors
9
9
  end
10
10
 
11
- it "rejected invalid urls" do
12
- model = Models::UrlValidatorModel.new
13
- model.url = 'http://^^^^.fr'
14
- model.valid?.should be(false)
15
- model.should have(1).errors
11
+ describe "for invalid emails" do
12
+ let(:model) do
13
+ Models::UrlValidatorModel.new.tap do |m|
14
+ m.url = 'http://^^^^.fr'
15
+ end
16
+ end
17
+
18
+ it "rejects invalid emails" do
19
+ model.valid?.should be(false)
20
+ model.should have(1).errors
21
+ end
22
+
23
+ it "generates an error message of type invalid" do
24
+ model.valid?.should be(false)
25
+ model.errors[:url].should == [model.errors.generate_message(:url, :invalid)]
26
+ end
16
27
  end
17
28
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 1
7
7
  - 0
8
- - 0
9
- version: 1.0.0
8
+ - 2
9
+ version: 1.0.2
10
10
  platform: ruby
11
11
  authors:
12
12
  - Franck Verrot
@@ -132,14 +132,17 @@ files:
132
132
  - activevalidators.gemspec
133
133
  - autotest/discover.rb
134
134
  - lib/active_model/validations/email_validator.rb
135
+ - lib/active_model/validations/phone_validator.rb
135
136
  - lib/active_model/validations/respond_to_validator.rb
136
137
  - lib/active_model/validations/url_validator.rb
137
138
  - lib/active_validators.rb
138
139
  - spec/models/email_validator_model.rb
140
+ - spec/models/phone_validator_model.rb
139
141
  - spec/models/respond_to_validator_model.rb
140
142
  - spec/models/url_validator_model.rb
141
143
  - spec/spec_helper.rb
142
144
  - spec/specs/email_spec.rb
145
+ - spec/specs/phone_spec.rb
143
146
  - spec/specs/respond_to_spec.rb
144
147
  - spec/specs/url_spec.rb
145
148
  has_rdoc: true
@@ -176,9 +179,11 @@ specification_version: 3
176
179
  summary: Collection of ActiveModel/ActiveRecord validations
177
180
  test_files:
178
181
  - spec/models/email_validator_model.rb
182
+ - spec/models/phone_validator_model.rb
179
183
  - spec/models/respond_to_validator_model.rb
180
184
  - spec/models/url_validator_model.rb
181
185
  - spec/spec_helper.rb
182
186
  - spec/specs/email_spec.rb
187
+ - spec/specs/phone_spec.rb
183
188
  - spec/specs/respond_to_spec.rb
184
189
  - spec/specs/url_spec.rb