activevalidators 2.0.1 → 2.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.
@@ -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