validates_formatting_of 0.3.7 → 0.4.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.
data/README.markdown CHANGED
@@ -30,7 +30,10 @@ You can still add the following options when using `validates_formatting_of`:
30
30
 
31
31
  * `:allow_nil`
32
32
  * `:allow_blank`
33
- * `:message` for custom validation messages
33
+ * `:on`
34
+ * `:if`
35
+ * `:unless`
36
+ * You also specify the `:message` option to use a custom validation message.
34
37
 
35
38
  # Available Formatting Validations
36
39
 
@@ -11,6 +11,13 @@ module ValidatesFormattingOf
11
11
  # This call will ensure that the user-provided email is a valid email. This way,
12
12
  # you will not need to find or write your own regex to validate. All of that
13
13
  # logic is contained within `validates_formatting_of`
14
+ #
15
+ # You can also pass conditions and options for Rails to use
16
+ # * :if
17
+ # * :unless
18
+ # * :allow_nil
19
+ # * :allow_blank
20
+ # * :on
14
21
  def validates_formatting_of(attribute, opts={})
15
22
  regex_for_validation = opts[:regex] || validate_with(opts[:using])
16
23
  validation_message = opts[:message] || ValidationMessages.message(opts[:using])
@@ -20,8 +27,9 @@ module ValidatesFormattingOf
20
27
  :message => validation_message,
21
28
  }
22
29
  }
23
- options.merge!(:allow_nil => opts[:allow_nil]) unless opts[:allow_nil].nil?
24
- options.merge!(:allow_blank => opts[:allow_blank]) unless opts[:allow_blank].nil?
30
+ %w(allow_nil allow_blank if unless on).each do |opt|
31
+ options.merge!(opt.to_sym => opts[opt.to_sym]) if opts[opt.to_sym].present?
32
+ end
25
33
  validates(attribute, options)
26
34
  end
27
35
 
@@ -3,7 +3,7 @@ module ValidatesFormattingOf
3
3
 
4
4
  # This method is very close to allowing what is specified in RFC 5322 and RFC 5321
5
5
  def email
6
- /^[0-9A-Z!#$\%&'*+-\/=?^_`{|}~]+@[0-9A-Z\-.]+\.[A-Z]{2,4}$/i
6
+ /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i
7
7
  end
8
8
 
9
9
  # Taken from Ryan Bates' screencast on extracting gems. Works extremely well. Thanks Ryan!
@@ -32,9 +32,16 @@ module ValidatesFormattingOf
32
32
  /^\d{5}(-\d{4})?$/
33
33
  end
34
34
 
35
- # US Phone numbers. (###) ###-#### | (###)###-#### | ###-###-####
35
+ # US Phone numbers.
36
+ # Examples of valid formats:
37
+ # * ###.###.####
38
+ # * ###-###-####
39
+ # * (###) ###-####
40
+ # * (###)###-####
41
+ # * #########
42
+ # * ### ###-####
36
43
  def us_phone
37
- /^([\(]{1}[0-9]{3}[\)]{1}[ |\-]{0,1}|^[0-9]{3}[\-| ])?[0-9]{3}(\-| ){1}[0-9]{4}$/
44
+ /^(\((\d{3})\)|\d{3})[ |\.|\-]?(\d{3})[ |\.|\-]?(\d{4})$/
38
45
  end
39
46
 
40
47
  # IP Address validation
@@ -1,3 +1,3 @@
1
1
  module ValidatesFormattingOf
2
- VERSION = "0.3.7"
2
+ VERSION = "0.4.0"
3
3
  end
@@ -12,6 +12,8 @@ describe ValidatesFormattingOf::ModelAdditions do
12
12
  Email.new(:email => "mbridges.91@gmail.com").should be_valid
13
13
  Email.new(:email => "some-random%%%strangely-formatted-email@lots.of.subdomains.com").should be_valid
14
14
  Email.new(:email => "this__???{}|__should@be-valid.com").should be_valid
15
+ Email.new(:email => "visitorservices@vmfa.museum").should be_valid
16
+ Email.new(:email => "info@samoa.travel").should be_valid
15
17
  end
16
18
  end
17
19
 
@@ -72,8 +74,10 @@ describe ValidatesFormattingOf::ModelAdditions do
72
74
  it "validates that the phone number provided is valid" do
73
75
  USPhone.new(:phone_number => '(234) 234-3456').should be_valid
74
76
  USPhone.new(:phone_number => '123 123 3456').should be_valid
77
+ USPhone.new(:phone_number => '1231233456').should be_valid
78
+ USPhone.new(:phone_number => '123.123.3456').should be_valid
75
79
  USPhone.new(:phone_number => '(223)123-2347').should be_valid
76
- USPhone.new(:phone_number => '2349870238').should_not be_valid
80
+ USPhone.new(:phone_number => '(223 123-2347').should_not be_valid
77
81
  USPhone.new(:phone_number => '12349870238').should_not be_valid
78
82
  end
79
83
  end
@@ -98,7 +102,7 @@ describe ValidatesFormattingOf::ModelAdditions do
98
102
  class Client < SuperModel::Base
99
103
  validates_formatting_of :cc, :using => :credit_card
100
104
  end
101
- it "validates that the email provided is valid" do
105
+ it "validates that the credit card number provided is valid" do
102
106
  Client.new(:cc => '4264-2879-1230-0000').should be_valid # Visa style
103
107
  Client.new(:cc => '6011-1111-0000-2391').should be_valid # Discover style
104
108
  Client.new(:cc => '5422434400828888').should be_valid # Mastercard style
@@ -136,6 +140,35 @@ describe ValidatesFormattingOf::ModelAdditions do
136
140
  Color.new(:color => "sdfsdfsf").should_not be_valid
137
141
  end
138
142
  end
143
+
144
+ describe "validation options" do
145
+ class Phony < SuperModel::Base
146
+ validates_formatting_of :phone, :using => :us_phone, :on => :create
147
+ end
148
+ it "validates the phone formatting only on creation" do
149
+ option = Phony.create!(:phone => "(123) 234-4567")
150
+ option.phone = "123123123"
151
+ option.should be_valid
152
+ end
153
+
154
+ class Iffy < SuperModel::Base
155
+ validates_presence_of :name
156
+ validates_formatting_of :phone, :using => :us_phone, :if => lambda { |iffy| iffy.name == "Matthew" }
157
+ end
158
+ it "validates the phone formatting only if a name is specified" do
159
+ Iffy.new(:phone => "(123 345-4567", :name => "Bill").should be_valid
160
+ Iffy.new(:phone => "(123 345-4567", :name => "Matthew").should_not be_valid
161
+ end
162
+
163
+ class Unlessy < SuperModel::Base
164
+ validates_presence_of :name
165
+ validates_formatting_of :phone, :using => :us_phone, :unless => lambda { |unlessy| unlessy.name == "Matthew" }
166
+ end
167
+ it "validates the phone formatting only if a name is specified" do
168
+ Unlessy.new(:phone => "(123 345-4567", :name => "Bill").should_not be_valid
169
+ Unlessy.new(:phone => "(123 345-4567", :name => "Matthew").should be_valid
170
+ end
171
+ end
139
172
  describe "dollars" do
140
173
  class Money < SuperModel::Base
141
174
  validates_formatting_of :amount, :using => :dollars
@@ -172,7 +205,7 @@ describe ValidatesFormattingOf::ModelAdditions do
172
205
  problems = Problems.new(:name => "sdfs12312dfsd")
173
206
  problems.should_not be_valid
174
207
  problems.errors.full_messages.first.should =~ /letters/i
175
- email = Email.new(:email => "fake@email.address")
208
+ email = Email.new(:email => "not.an.email.address")
176
209
  email.should_not be_valid
177
210
  email.errors.full_messages.first.should =~ /email/i
178
211
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: validates_formatting_of
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.7
4
+ version: 0.4.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-12-15 00:00:00.000000000 Z
12
+ date: 2012-01-02 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
16
- requirement: &70125953379060 !ruby/object:Gem::Requirement
16
+ requirement: &70103698133420 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '3.0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70125953379060
24
+ version_requirements: *70103698133420
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rake
27
- requirement: &70125953378380 !ruby/object:Gem::Requirement
27
+ requirement: &70103698132140 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *70125953378380
35
+ version_requirements: *70103698132140
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rspec
38
- requirement: &70125953377680 !ruby/object:Gem::Requirement
38
+ requirement: &70103698131500 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *70125953377680
46
+ version_requirements: *70103698131500
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: supermodel
49
- requirement: &70125953393220 !ruby/object:Gem::Requirement
49
+ requirement: &70103698130720 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,7 +54,7 @@ dependencies:
54
54
  version: '0'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *70125953393220
57
+ version_requirements: *70103698130720
58
58
  description: Common Rails validations wrapped in a gem.
59
59
  email:
60
60
  - mbridges.91@gmail.com