activevalidators 2.0.1 → 2.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,7 +1,11 @@
1
1
  language: ruby
2
2
  rvm:
3
+ - 1.8.7
4
+ - ree
5
+ - jruby-18mode
6
+ - rbx-18mode
3
7
  - 1.9.2
4
8
  - 1.9.3
5
- - jruby-19mode # JRuby in 1.9 mode
9
+ - jruby-19mode
6
10
  - rbx-19mode
7
- - ruby-head
11
+ - ruby-head
@@ -1,7 +1,7 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  Gem::Specification.new do |s|
3
3
  s.name = 'activevalidators'
4
- s.version = '2.0.1'
4
+ s.version = '2.0.2'
5
5
  s.platform = Gem::Platform::RUBY
6
6
  s.authors = ['Franck Verrot', 'Paco Guzmán', 'Oriol Gual', 'Garrett Bjerkhoel', 'Renato Riccieri Santos Zannon', 'Brian Moseley']
7
7
  s.email = ['franck@verrot.fr']
@@ -9,8 +9,6 @@ Gem::Specification.new do |s|
9
9
  s.summary = %q{Collection of ActiveModel/ActiveRecord validations}
10
10
  s.description = %q{ActiveValidators is a collection of ActiveModel/ActiveRecord validations}
11
11
 
12
- s.required_ruby_version = '>= 1.9.2'
13
-
14
12
  s.add_development_dependency 'bundler'
15
13
  s.add_development_dependency 'minitest'
16
14
  s.add_dependency 'rake' , '>= 0.8.7'
@@ -2,6 +2,10 @@ require 'mail'
2
2
  module ActiveModel
3
3
  module Validations
4
4
  class EmailValidator < EachValidator
5
+ def check_validity!
6
+ raise ArgumentError, "Not a callable object #{options[:with].inspect}" unless options[:with] == nil || options[:with].respond_to?(:call)
7
+ end
8
+
5
9
  def validate_each(record, attribute, value)
6
10
  # takes from: https://github.com/hallelujah/valid_email
7
11
  begin
@@ -24,6 +28,13 @@ module ActiveModel
24
28
  rescue Exception => e
25
29
  valid = false
26
30
  end
31
+
32
+ if options[:with]
33
+ # technically the test suite will pass without the boolean coercion
34
+ # but we know the code is safer with it in place
35
+ valid &&= !!options[:with].call(mail)
36
+ end
37
+
27
38
  record.errors.add attribute, (options[:message]) unless valid
28
39
  end
29
40
  end
@@ -3,7 +3,7 @@ module ActiveModel
3
3
  class PhoneValidator < EachValidator
4
4
  def validate_each(record, attribute, value)
5
5
  country_code = Country.new(options[:country].to_s.upcase).country_code unless options[:country].blank?
6
- record.errors.add(attribute, options[:message]) if value.blank? || ! (options[:country].blank? ? Phony.plausible?(value) : Phony.plausible?(value, cc: country_code) )
6
+ record.errors.add(attribute, options[:message]) if value.blank? || ! (options[:country].blank? ? Phony.plausible?(value) : Phony.plausible?(value, :cc => country_code) )
7
7
  end
8
8
 
9
9
  end
@@ -5,11 +5,11 @@ module ActiveModel
5
5
  @value = value
6
6
  unless country = options[:country]
7
7
  if country_method = options[:country_method]
8
- country = record.send(country_method)
8
+ country = record.send(country_method)
9
9
  else
10
- country = 'us'
11
- end
12
- end
10
+ country = 'us'
11
+ end
12
+ end
13
13
  @formats = PostalCodeValidator.known_formats[country.to_s]
14
14
  raise "No known postal code formats for country #{country}" unless @formats
15
15
  record.errors.add(attribute) if value.blank? || !matches_any?
@@ -45,6 +45,7 @@ module ActiveModel
45
45
  'ic' => ['###'],
46
46
  'it' => ['#####'],
47
47
  'jp' => ['###-####', '#######'],
48
+ 'ky' => ['KY#-####'],
48
49
  'li' => ['####'],
49
50
  'lk' => ['#####'],
50
51
  'lt' => ['LT-#####', '#####'],
@@ -84,7 +85,7 @@ module ActiveModel
84
85
  private
85
86
 
86
87
  def self.regexp_from(format)
87
- Regexp.new '\A' + (Regexp.escape format).gsub(/[@#]/, '@' => '[[:alpha:]]', '#' => 'd') + '\z'
88
+ Regexp.new '\A' + ActiveValidators::OneNineShims::OneNineString.new(Regexp.escape format).gsub(/[@#]/, '@' => '[[:alpha:]]', '#' => 'd') + '\z'
88
89
  end
89
90
  end
90
91
  end
@@ -0,0 +1,11 @@
1
+ module ActiveValidators
2
+ module OneNineShims
3
+ class OneNineString < String
4
+ def gsub(pattern, hash)
5
+ super(pattern) do |m|
6
+ hash[m]
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -1,6 +1,7 @@
1
1
  require 'active_model'
2
2
  require 'phony'
3
3
  require 'countries'
4
+ require 'active_validators/one_nine_shims/one_nine_string'
4
5
 
5
6
  module ActiveModel
6
7
  module Validations
@@ -54,6 +54,38 @@ describe "Email Validation" do
54
54
  end
55
55
  end
56
56
 
57
+ describe "with: #<Proc>" do
58
+ it "rejects any false result" do
59
+ subject = build_email_record({:email => "franck@verrot.fr"}, {:with => lambda {|e| false }})
60
+ subject.valid?.must_equal false
61
+ subject.errors.size.must_equal 1
62
+ end
63
+
64
+ it "accepts any true result" do
65
+ subject = build_email_record({:email => "franck@verrot.fr"}, {:with => lambda {|e| true }})
66
+ subject.valid?.must_equal true
67
+ subject.errors.size.must_equal 0
68
+ end
69
+
70
+ it "passes in the parsed email address" do
71
+ subject = build_email_record({:email => "franck@hotmail.com"}, {:with => lambda {|email| not email.domain == "hotmail.com" }})
72
+ subject.valid?.must_equal false
73
+ subject.errors.size.must_equal 1
74
+ end
75
+
76
+ it "rejects a nil result" do
77
+ subject = build_email_record({:email => "franck@verrot.fr"}, {:with => lambda {|email| email.domain =~ /\.com\Z/ }})
78
+ subject.valid?.must_equal false
79
+ subject.errors.size.must_equal 1
80
+ end
81
+
82
+ it "accepts a numerical result" do
83
+ subject = build_email_record({:email => "franck@verrot.fr"}, {:with => lambda {|email| email.domain =~ /\.fr\Z/ }})
84
+ subject.valid?.must_equal true
85
+ subject.errors.size.must_equal 0
86
+ end
87
+ end
88
+
57
89
  describe "for invalid emails" do
58
90
  it "rejects invalid emails" do
59
91
  subject = build_email_record :email => 'franck.fr'
@@ -75,9 +107,17 @@ describe "Email Validation" do
75
107
  end
76
108
  end
77
109
 
110
+ it "checks validity of the arguments" do
111
+ [3, "foo", 1..6].each do |wrong_argument|
112
+ assert_raises(ArgumentError,"Not a callable object #{wrong_argument.inspect}") do
113
+ TestRecord.validates :email, :email => { :with => wrong_argument }
114
+ end
115
+ end
116
+ end
117
+
78
118
  def build_email_record(attrs = {}, opts = {})
79
119
  TestRecord.reset_callbacks(:validate)
80
- TestRecord.validates :email, :email => { :strict => opts[:strict] }
120
+ TestRecord.validates :email, :email => { :strict => opts[:strict], :with => opts[:with] }
81
121
  TestRecord.new attrs
82
122
  end
83
123
  end
@@ -28,7 +28,7 @@ describe "Postal Code Validation" do
28
28
  formats.each do |format|
29
29
  it "should validate format of postal code with #{format}" do
30
30
  subject = build_postal_code_record :country => country
31
- subject.postal_code = format.gsub(/[@#]/, '@' => 'A', '#' => '9')
31
+ subject.postal_code = ActiveValidators::OneNineShims::OneNineString.new(format).gsub(/[@#]/, '@' => 'A', '#' => '9')
32
32
  subject.valid?.must_equal true
33
33
  subject.errors.size.must_equal 0
34
34
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activevalidators
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.1
4
+ version: 2.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -14,11 +14,11 @@ authors:
14
14
  autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
- date: 2012-09-15 00:00:00.000000000 Z
17
+ date: 2012-11-23 00:00:00.000000000 Z
18
18
  dependencies:
19
19
  - !ruby/object:Gem::Dependency
20
20
  name: bundler
21
- requirement: &70131187685580 !ruby/object:Gem::Requirement
21
+ requirement: !ruby/object:Gem::Requirement
22
22
  none: false
23
23
  requirements:
24
24
  - - ! '>='
@@ -26,10 +26,15 @@ dependencies:
26
26
  version: '0'
27
27
  type: :development
28
28
  prerelease: false
29
- version_requirements: *70131187685580
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ none: false
31
+ requirements:
32
+ - - ! '>='
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
30
35
  - !ruby/object:Gem::Dependency
31
36
  name: minitest
32
- requirement: &70131187684280 !ruby/object:Gem::Requirement
37
+ requirement: !ruby/object:Gem::Requirement
33
38
  none: false
34
39
  requirements:
35
40
  - - ! '>='
@@ -37,10 +42,15 @@ dependencies:
37
42
  version: '0'
38
43
  type: :development
39
44
  prerelease: false
40
- version_requirements: *70131187684280
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ none: false
47
+ requirements:
48
+ - - ! '>='
49
+ - !ruby/object:Gem::Version
50
+ version: '0'
41
51
  - !ruby/object:Gem::Dependency
42
52
  name: rake
43
- requirement: &70131187683500 !ruby/object:Gem::Requirement
53
+ requirement: !ruby/object:Gem::Requirement
44
54
  none: false
45
55
  requirements:
46
56
  - - ! '>='
@@ -48,10 +58,15 @@ dependencies:
48
58
  version: 0.8.7
49
59
  type: :runtime
50
60
  prerelease: false
51
- version_requirements: *70131187683500
61
+ version_requirements: !ruby/object:Gem::Requirement
62
+ none: false
63
+ requirements:
64
+ - - ! '>='
65
+ - !ruby/object:Gem::Version
66
+ version: 0.8.7
52
67
  - !ruby/object:Gem::Dependency
53
68
  name: activemodel
54
- requirement: &70131187682840 !ruby/object:Gem::Requirement
69
+ requirement: !ruby/object:Gem::Requirement
55
70
  none: false
56
71
  requirements:
57
72
  - - ! '>='
@@ -59,10 +74,15 @@ dependencies:
59
74
  version: 3.0.0
60
75
  type: :runtime
61
76
  prerelease: false
62
- version_requirements: *70131187682840
77
+ version_requirements: !ruby/object:Gem::Requirement
78
+ none: false
79
+ requirements:
80
+ - - ! '>='
81
+ - !ruby/object:Gem::Version
82
+ version: 3.0.0
63
83
  - !ruby/object:Gem::Dependency
64
84
  name: phony
65
- requirement: &70131187682280 !ruby/object:Gem::Requirement
85
+ requirement: !ruby/object:Gem::Requirement
66
86
  none: false
67
87
  requirements:
68
88
  - - ~>
@@ -70,10 +90,15 @@ dependencies:
70
90
  version: 1.7.4
71
91
  type: :runtime
72
92
  prerelease: false
73
- version_requirements: *70131187682280
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ none: false
95
+ requirements:
96
+ - - ~>
97
+ - !ruby/object:Gem::Version
98
+ version: 1.7.4
74
99
  - !ruby/object:Gem::Dependency
75
100
  name: countries
76
- requirement: &70131187681620 !ruby/object:Gem::Requirement
101
+ requirement: !ruby/object:Gem::Requirement
77
102
  none: false
78
103
  requirements:
79
104
  - - ~>
@@ -81,10 +106,15 @@ dependencies:
81
106
  version: 0.8.2
82
107
  type: :runtime
83
108
  prerelease: false
84
- version_requirements: *70131187681620
109
+ version_requirements: !ruby/object:Gem::Requirement
110
+ none: false
111
+ requirements:
112
+ - - ~>
113
+ - !ruby/object:Gem::Version
114
+ version: 0.8.2
85
115
  - !ruby/object:Gem::Dependency
86
116
  name: mail
87
- requirement: &70131187681060 !ruby/object:Gem::Requirement
117
+ requirement: !ruby/object:Gem::Requirement
88
118
  none: false
89
119
  requirements:
90
120
  - - ! '>='
@@ -92,10 +122,15 @@ dependencies:
92
122
  version: '0'
93
123
  type: :runtime
94
124
  prerelease: false
95
- version_requirements: *70131187681060
125
+ version_requirements: !ruby/object:Gem::Requirement
126
+ none: false
127
+ requirements:
128
+ - - ! '>='
129
+ - !ruby/object:Gem::Version
130
+ version: '0'
96
131
  - !ruby/object:Gem::Dependency
97
132
  name: date_validator
98
- requirement: &70131187680120 !ruby/object:Gem::Requirement
133
+ requirement: !ruby/object:Gem::Requirement
99
134
  none: false
100
135
  requirements:
101
136
  - - ! '>='
@@ -103,7 +138,12 @@ dependencies:
103
138
  version: '0'
104
139
  type: :runtime
105
140
  prerelease: false
106
- version_requirements: *70131187680120
141
+ version_requirements: !ruby/object:Gem::Requirement
142
+ none: false
143
+ requirements:
144
+ - - ! '>='
145
+ - !ruby/object:Gem::Version
146
+ version: '0'
107
147
  description: ActiveValidators is a collection of ActiveModel/ActiveRecord validations
108
148
  email:
109
149
  - franck@verrot.fr
@@ -129,6 +169,7 @@ files:
129
169
  - lib/active_model/validations/tracking_number_validator.rb
130
170
  - lib/active_model/validations/twitter_validator.rb
131
171
  - lib/active_model/validations/url_validator.rb
172
+ - lib/active_validators/one_nine_shims/one_nine_string.rb
132
173
  - lib/activevalidators.rb
133
174
  - test/test_helper.rb
134
175
  - test/validations/credit_card_test.rb
@@ -154,7 +195,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
154
195
  requirements:
155
196
  - - ! '>='
156
197
  - !ruby/object:Gem::Version
157
- version: 1.9.2
198
+ version: '0'
158
199
  required_rubygems_version: !ruby/object:Gem::Requirement
159
200
  none: false
160
201
  requirements:
@@ -163,7 +204,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
163
204
  version: '0'
164
205
  requirements: []
165
206
  rubyforge_project:
166
- rubygems_version: 1.8.11
207
+ rubygems_version: 1.8.23
167
208
  signing_key:
168
209
  specification_version: 3
169
210
  summary: Collection of ActiveModel/ActiveRecord validations