validates_formatting_of 0.6.2 → 0.6.9

Sign up to get free protection for your applications and to get access to all the features.
data/.rspec CHANGED
@@ -1 +1,2 @@
1
1
  --color
2
+ --order rand
@@ -1,5 +1,4 @@
1
1
  require "validates_formatting_of/version"
2
- require "validates_formatting_of/validation_messages"
3
- require "validates_formatting_of/validating_methods"
2
+ require "validates_formatting_of/method"
4
3
  require "validates_formatting_of/model_additions"
5
4
  require "validates_formatting_of/railtie" if defined? Rails
@@ -0,0 +1,60 @@
1
+ require 'validates_formatting_of/validation'
2
+ require 'validates_formatting_of/validation_addition'
3
+
4
+ module ValidatesFormattingOf
5
+
6
+ class MissingValidation < StandardError; end
7
+
8
+ module Method
9
+
10
+ extend ValidationAddition
11
+
12
+ # This method is very close to allowing what is specified in RFC 5322 and RFC 5321
13
+ add :email, %r{\A([^@\s]+)@((?:(?!-)[-a-z0-9]+(?<!-)\.)+[a-z]{2,})\Z}i, "is not a valid email"
14
+
15
+ # Thie version of the email exists to support common validation libraries (such
16
+ # as client_side_validations) that require access to Rails' validation. Look-behinds
17
+ # are not supported in javascript.
18
+ add :simple_email, %r{\A([^@\s]+)@((?:(?!-)[-a-z0-9]+(?<!-)\.)+[a-z]{2,})\Z}i, "is not a valid email"
19
+
20
+ # Taken from Ryan Bates' screencast on extracting gems. Works extremely well. Thanks Ryan!
21
+ # (slightly revised to work on MRI 1.8.7 and ree)
22
+ add :url, %r{\Ahttps?:\/\/([^\s:@]+:[^\s:@]*@)?[A-Za-z\d\-]+(\.[A-Za-z\d\-]+)+\.?(:\d{1,5})?([\/?]\S*)?\Z}i, "is not a valid URL"
23
+
24
+ # No numbers of symbols. allows "-"
25
+ add :alpha, %r{\A([^\d\W]|[-])*\Z}, "must be only letters or dashes"
26
+
27
+ # Letters, numbers, and spaces
28
+ add :alphanum, %r{\A[A-Z0-9\s]+\Z}i, "must be letters, numbers"
29
+
30
+ # Visa, Mastercard, Discver, and American Express
31
+ add :credit_card, %r{\A((4\d{3})|(5[1-5]\d{2})|(6011))-?\d{4}-?\d{4}-?\d{4}|3[4,7]\d{13}\Z}, "is not a valid credit card number"
32
+
33
+ # US Zip code. ##### or #####-####
34
+ add :us_zip, %r{\A\d{5}(-\d{4})?\Z}, "is not a valid zipcode"
35
+
36
+ # US Phone numbers.
37
+ # Examples of valid formats:
38
+ # * ###.###.####
39
+ # * ###-###-####
40
+ # * (###) ###-####
41
+ # * (###)###-####
42
+ # * #########
43
+ # * ### ###-####
44
+ add :us_phone, %r{\A(\((\d{3})\)|\d{3})[ |\.|\-]?(\d{3})[ |\.|\-]?(\d{4})\Z}, "is not a valid phone number"
45
+
46
+ # IP Address validation
47
+ add :ip_address, %r{\A(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\Z}, "is not a valid IPv4 address"
48
+ add :ip_address_v4, %r{\A(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\Z}, "is not a valid IPv4 address"
49
+
50
+ # Social Security Number pattern
51
+ add :ssn, %r{\A\d{3}([-.]){1}\d{2}([-.]){1}\d{4}\Z}, "is not a valid social security number"
52
+
53
+ # Matches CSS colors either in three or six digit formats
54
+ add :hex_color, %r{\A([A-F0-9]{6}|[A-F0-9]{3})\Z}i, "is not a valid hex color"
55
+
56
+ # Ensures that what value is passed is a dollar amount of some kind
57
+ add :dollars, %r{\A\$?(\d{1,3}(\,\d{3})*|(\d+))(\.\d{2})?\Z}, "is not a valid dollar amount"
58
+
59
+ end
60
+ end
@@ -1,3 +1,5 @@
1
+ require 'active_support/core_ext/hash/reverse_merge'
2
+
1
3
  module ValidatesFormattingOf
2
4
  module ModelAdditions
3
5
 
@@ -8,36 +10,25 @@ module ValidatesFormattingOf
8
10
  # validates_formatting_of :email, :using => :email
9
11
  # end
10
12
  #
11
- # This call will ensure that the user-provided email is a valid email. This way,
12
- # you will not need to find or write your own regex to validate. All of that
13
- # logic is contained within `validates_formatting_of`
14
- #
13
+ # If your column name is idencital to any of the built-in methods, you
14
+ # may leave off the `:using` option and validates_formatting_of will
15
+ # automatically use the validation with the matching name.
16
+ #
17
+ # class User < ActiveRecord::Base
18
+ # validates_formatting_of :email
19
+ # end
20
+ #
15
21
  # You can also pass conditions and options for Rails to use
16
22
  # * :if
17
23
  # * :unless
18
24
  # * :allow_nil
19
25
  # * :allow_blank
20
26
  # * :on
21
- def validates_formatting_of(attribute, opts={})
22
- regex_for_validation = opts[:regex] || validate_with(opts[:using])
23
- validation_message = opts[:message] || ValidationMessages.message(opts[:using])
24
- options = {
25
- :format => {
26
- :with => regex_for_validation,
27
- :message => validation_message,
28
- }
29
- }
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
33
- validates(attribute, options)
27
+ def validates_formatting_of(attribute, options = {})
28
+ validation = Method.find(attribute, options)
29
+ options.reverse_merge!(:with => validation.regex, :message => validation.message)
30
+ self.validates_format_of(attribute, options)
34
31
  end
35
32
 
36
- private
37
-
38
- def validate_with(method)
39
- # Actually retrieve the regex to check against
40
- ValidatingMethods.send(method)
41
- end
42
33
  end
43
34
  end
@@ -0,0 +1,24 @@
1
+ module ValidatesFormattingOf
2
+
3
+ class InvalidRegularExpression < StandardError; end
4
+
5
+ class Validation
6
+ attr_reader :name, :regex, :message
7
+
8
+ def initialize(name, regexp, message = "is not correctly formatted")
9
+ callable = regexp.respond_to? :call
10
+ if !callable && regexp.class.to_s != "Regexp"
11
+ raise InvalidRegularExpression, "You must specify a Regexp, a proc, or a lambda for the #{name.inspect} validation."
12
+ end
13
+ @name, @regex, @message = name, regexp, message
14
+ end
15
+
16
+ def inspect
17
+ "#<Validation name: #{name.inspect}, regex: #{regex.inspect}, message: #{message}>"
18
+ end
19
+
20
+ def to_s
21
+ "<Validation::#{name.to_s}>"
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,25 @@
1
+ module ValidatesFormattingOf
2
+ module ValidationAddition
3
+ attr_reader :validations
4
+
5
+ def add(name, regex, message = nil)
6
+ @validations ||= {}
7
+ @validations[name.to_sym] = Validation.new(name.to_sym, regex, message)
8
+ end
9
+
10
+ def find(attribute, opts = {})
11
+ method = opts[:using].nil? ? attribute : opts[:using]
12
+ if !exists? method
13
+ raise MissingValidation, "The validation method #{method.to_sym.inspect} has not been defined."
14
+ end
15
+ if method.to_sym == :ip_address
16
+ warn "[DEPRECATION] The :ip_address validation for `validates_formatting_of` is DEPRECATED. Please update your model validations to use :ip_address_v4. This method will be removed by version 0.7.0."
17
+ end
18
+ @validations[method.to_sym]
19
+ end
20
+
21
+ def exists?(name)
22
+ !@validations[name.to_sym].nil?
23
+ end
24
+ end
25
+ end
@@ -1,3 +1,3 @@
1
1
  module ValidatesFormattingOf
2
- VERSION = "0.6.2"
2
+ VERSION = "0.6.9"
3
3
  end
data/spec/spec_helper.rb CHANGED
@@ -1,7 +1,28 @@
1
+ require 'simplecov'
2
+ SimpleCov.start
3
+
1
4
  require 'validates_formatting_of'
2
- require 'supermodel'
5
+ require 'active_model'
6
+
7
+ class TestActiveRecord
8
+ include ActiveModel::Validations
9
+ include ActiveModel::Conversion
3
10
 
4
- class SuperModel::Base
5
- include ActiveModel::Validations::Callbacks
6
11
  extend ValidatesFormattingOf::ModelAdditions
12
+
13
+ def initialize(attributes = {})
14
+ attributes.each do |name, value|
15
+ send("#{name}=", value)
16
+ end
17
+ @persisted = false
18
+ end
19
+
20
+ def save
21
+ @persisted = true
22
+ end
23
+
24
+ def persisted?
25
+ @persisted ||= false
26
+ end
27
+
7
28
  end
@@ -3,8 +3,9 @@ require 'spec_helper'
3
3
  describe ValidatesFormattingOf::ModelAdditions do
4
4
 
5
5
  describe "email" do
6
- class Email < SuperModel::Base
7
- validates_formatting_of :email, :using => :email
6
+ class Email < TestActiveRecord
7
+ attr_accessor :email
8
+ validates_formatting_of :email
8
9
  end
9
10
  it "validates that the email provided is valid" do
10
11
  Email.new(:email => "example@example.com").should be_valid
@@ -21,7 +22,8 @@ describe ValidatesFormattingOf::ModelAdditions do
21
22
  end
22
23
 
23
24
  describe "simple email for 1.8.7 and javascript validations (such as with client_side_validations)" do
24
- class SimpleEmail < SuperModel::Base
25
+ class SimpleEmail < TestActiveRecord
26
+ attr_accessor :email
25
27
  validates_formatting_of :email, :using => :simple_email
26
28
  end
27
29
  it "validates that the email provided is valid" do
@@ -38,8 +40,9 @@ describe ValidatesFormattingOf::ModelAdditions do
38
40
  end
39
41
  end
40
42
  describe "url" do
41
- class Webpage < SuperModel::Base
42
- validates_formatting_of :url, :using => :url
43
+ class Webpage < TestActiveRecord
44
+ attr_accessor :url
45
+ validates_formatting_of :url
43
46
  end
44
47
  it "validates that the url provided is valid" do
45
48
  Webpage.new(:url => 'http://something.com').should be_valid
@@ -51,7 +54,8 @@ describe ValidatesFormattingOf::ModelAdditions do
51
54
  end
52
55
 
53
56
  describe "us_zip" do
54
- class USZip < SuperModel::Base
57
+ class USZip < TestActiveRecord
58
+ attr_accessor :zipcode
55
59
  validates_formatting_of :zipcode, :using => :us_zip
56
60
  end
57
61
  it "validates that the zipcode provided is valid" do
@@ -64,19 +68,21 @@ describe ValidatesFormattingOf::ModelAdditions do
64
68
  end
65
69
 
66
70
  describe "alpha" do
67
- class Alpha < SuperModel::Base
68
- validates_formatting_of :letters, :using => :alpha
71
+ class Alpha < TestActiveRecord
72
+ attr_accessor :alpha
73
+ validates_formatting_of :alpha
69
74
  end
70
75
  it "validates that the letters provided is valid" do
71
- Alpha.new(:letters => 'abscdsofjsdpfahdsofkajlsdfaspdhjfads').should be_valid
72
- Alpha.new(:letters => 'asdfalskdfjhas-dlfhasdksdfaldhfadsfasdfa').should be_valid
73
- Alpha.new(:letters => 'adsufasodfksadjfskjdfha98').should_not be_valid
74
- Alpha.new(:letters => 'asdf ausdpf98hasdfo alsdf ja8 sd').should_not be_valid
76
+ Alpha.new(:alpha => 'abscdsofjsdpfahdsofkajlsdfaspdhjfads').should be_valid
77
+ Alpha.new(:alpha => 'asdfalskdfjhas-dlfhasdksdfaldhfadsfasdfa').should be_valid
78
+ Alpha.new(:alpha => 'adsufasodfksadjfskjdfha98').should_not be_valid
79
+ Alpha.new(:alpha => 'asdf ausdpf98hasdfo alsdf ja8 sd').should_not be_valid
75
80
  end
76
81
  end
77
82
 
78
83
  describe "alphanum" do
79
- class Alphanum < SuperModel::Base
84
+ class Alphanum < TestActiveRecord
85
+ attr_accessor :letters_and_numbers
80
86
  validates_formatting_of :letters_and_numbers, :using => :alphanum
81
87
  end
82
88
  it "validates that the letters provided is valid" do
@@ -88,7 +94,8 @@ describe ValidatesFormattingOf::ModelAdditions do
88
94
  end
89
95
 
90
96
  describe "us_phone" do
91
- class USPhone < SuperModel::Base
97
+ class USPhone < TestActiveRecord
98
+ attr_accessor :phone_number
92
99
  validates_formatting_of :phone_number, :using => :us_phone
93
100
  end
94
101
  it "validates that the phone number provided is valid" do
@@ -103,7 +110,8 @@ describe ValidatesFormattingOf::ModelAdditions do
103
110
  end
104
111
 
105
112
  describe "ip_address" do
106
- class IPAddress < SuperModel::Base
113
+ class IPAddress < TestActiveRecord
114
+ attr_accessor :ip
107
115
  validates_formatting_of :ip, :using => :ip_address
108
116
  end
109
117
  it "validates that the IP address provided is valid" do
@@ -117,23 +125,25 @@ describe ValidatesFormattingOf::ModelAdditions do
117
125
  end
118
126
 
119
127
  describe "ip_address_v4" do
120
- class IPAddress < SuperModel::Base
121
- validates_formatting_of :ip, :using => :ip_address_v4
128
+ class IPAddress2 < TestActiveRecord
129
+ attr_accessor :ipv4
130
+ validates_formatting_of :ipv4, :using => :ip_address_v4
122
131
  end
123
132
  it "validates that the IP address provided is valid" do
124
- IPAddress.new(:ip => '10.10.10').should_not be_valid
125
- IPAddress.new(:ip => '999.10.10.20').should_not be_valid
126
- IPAddress.new(:ip => '2222.22.22.22').should_not be_valid
127
- IPAddress.new(:ip => '22.2222.22.2').should_not be_valid
128
- IPAddress.new(:ip => '127.0.0.1').should be_valid
129
- IPAddress.new(:ip => '132.254.111.10').should be_valid
133
+ IPAddress2.new(:ipv4 => '10.10.10').should_not be_valid
134
+ IPAddress2.new(:ipv4 => '999.10.10.20').should_not be_valid
135
+ IPAddress2.new(:ipv4 => '2222.22.22.22').should_not be_valid
136
+ IPAddress2.new(:ipv4 => '22.2222.22.2').should_not be_valid
137
+ IPAddress2.new(:ipv4 => '127.0.0.1').should be_valid
138
+ IPAddress2.new(:ipv4 => '132.254.111.10').should be_valid
130
139
  end
131
140
  end
132
141
 
133
142
  # For clarification, NONE of the following numbers are real credit card numbers.
134
143
  # They only match the pattern. These were randomly made for testing.
135
144
  describe "credit_card" do
136
- class Client < SuperModel::Base
145
+ class Client < TestActiveRecord
146
+ attr_accessor :cc
137
147
  validates_formatting_of :cc, :using => :credit_card
138
148
  end
139
149
  it "validates that the credit card number provided is valid" do
@@ -145,8 +155,9 @@ describe ValidatesFormattingOf::ModelAdditions do
145
155
  end
146
156
 
147
157
  describe "ssn" do
148
- class AnotherPerson < SuperModel::Base
149
- validates_formatting_of :ssn, :using => :ssn
158
+ class AnotherPerson < TestActiveRecord
159
+ attr_accessor :ssn
160
+ validates_formatting_of :ssn
150
161
  end
151
162
  it "validates that the social security number provided is valid" do
152
163
  AnotherPerson.new(:ssn => "145.47.0191").should be_valid
@@ -159,7 +170,8 @@ describe ValidatesFormattingOf::ModelAdditions do
159
170
  end
160
171
 
161
172
  describe "hex_color" do
162
- class Color < SuperModel::Base
173
+ class Color < TestActiveRecord
174
+ attr_accessor :color
163
175
  validates_formatting_of :color, :using => :hex_color
164
176
  end
165
177
  it "validates that the hex color value provided is valid" do
@@ -174,18 +186,22 @@ describe ValidatesFormattingOf::ModelAdditions do
174
186
  Color.new(:color => "sdfsdfsf").should_not be_valid
175
187
  end
176
188
  end
177
-
189
+
178
190
  describe "validation options" do
179
- class Phony < SuperModel::Base
180
- validates_formatting_of :phone, :using => :us_phone, :on => :create
191
+ class Phony < TestActiveRecord
192
+ attr_accessor :phone, :phone2
193
+ validates_formatting_of :phone, :using => :us_phone, :on => :create
194
+ validates_formatting_of :phone2, :using => :us_phone, :on => :update
181
195
  end
182
196
  it "validates the phone formatting only on creation" do
183
- option = Phony.create!(:phone => "(123) 234-4567")
197
+ option = Phony.new(:phone => "(123) 234-4567")
198
+ option.should be_valid
184
199
  option.phone = "123123123"
185
200
  option.should be_valid
186
201
  end
187
-
188
- class Iffy < SuperModel::Base
202
+
203
+ class Iffy < TestActiveRecord
204
+ attr_accessor :name, :phone
189
205
  validates_presence_of :name
190
206
  validates_formatting_of :phone, :using => :us_phone, :if => lambda { |iffy| iffy.name == "Matthew" }
191
207
  end
@@ -193,8 +209,9 @@ describe ValidatesFormattingOf::ModelAdditions do
193
209
  Iffy.new(:phone => "(123 345-4567", :name => "Bill").should be_valid
194
210
  Iffy.new(:phone => "(123 345-4567", :name => "Matthew").should_not be_valid
195
211
  end
196
-
197
- class Unlessy < SuperModel::Base
212
+
213
+ class Unlessy < TestActiveRecord
214
+ attr_accessor :name, :phone
198
215
  validates_presence_of :name
199
216
  validates_formatting_of :phone, :using => :us_phone, :unless => lambda { |unlessy| unlessy.name == "Matthew" }
200
217
  end
@@ -204,7 +221,8 @@ describe ValidatesFormattingOf::ModelAdditions do
204
221
  end
205
222
  end
206
223
  describe "dollars" do
207
- class Money < SuperModel::Base
224
+ class Money < TestActiveRecord
225
+ attr_accessor :amount
208
226
  validates_formatting_of :amount, :using => :dollars
209
227
  end
210
228
  it "validates that the dollars amount provided is valid" do
@@ -220,7 +238,8 @@ describe ValidatesFormattingOf::ModelAdditions do
220
238
  end
221
239
  end
222
240
  describe "custom messages" do
223
- class Message < SuperModel::Base
241
+ class Message < TestActiveRecord
242
+ attr_accessor :first_name
224
243
  validates_formatting_of :first_name, :using => :alpha, :message => "is not a valid first name"
225
244
  end
226
245
  it "are allowed and can be used in displaying error messages" do
@@ -232,7 +251,8 @@ describe ValidatesFormattingOf::ModelAdditions do
232
251
  end
233
252
 
234
253
  describe "default error messages" do
235
- class Problems < SuperModel::Base
254
+ class Problems < TestActiveRecord
255
+ attr_accessor :name
236
256
  validates_formatting_of :name, :using => :alpha
237
257
  end
238
258
  it "set a default error" do
@@ -245,24 +265,24 @@ describe ValidatesFormattingOf::ModelAdditions do
245
265
  end
246
266
  end
247
267
 
248
- =begin
249
- # Currently, SuperModel's validations do not detect allow_blank or allow_nil
250
- # This functionality has been tested separately in an empty Rails app with perfect
251
- # results.
252
-
253
268
  describe "nil and blank values" do
254
- class People < SuperModel::Base
255
- validates_formatting_of :last_name, :using => :alpha, :allow_blank => true
256
- end
257
- it "are allowed" do
258
- p = People.new(:last_name => "something")
259
- p.should be_valid
260
- p.save!
261
- p.reload
262
- p.last_name = ""
263
- p.should_not be_valid
269
+ class PeopleTest < TestActiveRecord
270
+ attr_accessor :email, :email2, :email3
271
+ validates_formatting_of :email, :allow_nil => true
272
+ validates_formatting_of :email2, :using => :email, :allow_blank => true
273
+ validates_formatting_of :email3, :using => :email
274
+ end
275
+ let(:people) { PeopleTest.new(:email => "mbridges.91@gmail.com", :email2 => "mbridges.91@gmail.com", :email3 => "mbridges.91@gmail.com") }
276
+ it "should test nil and blank values correctly" do
277
+ people.email = nil
278
+ people.should be_valid
279
+ people.email = "mbridges.91@gmail.com"
280
+ people.email2 = ""
281
+ people.should be_valid
282
+ people.email2 = "mbridges.91@gmail.com"
283
+ people.email3 = nil
284
+ people.should_not be_valid
264
285
  end
265
286
  end
266
- =end
267
287
 
268
288
  end
@@ -0,0 +1,35 @@
1
+ require 'validates_formatting_of/validation_addition'
2
+
3
+ module ValidatesFormattingOf
4
+
5
+ class TestAdding
6
+ extend ValidationAddition
7
+ end
8
+
9
+ describe ValidationAddition do
10
+ before do
11
+ TestAdding.add :email, /email/i
12
+ end
13
+ it "should be able to add new validations" do
14
+ TestAdding.add :another, /another/i
15
+ TestAdding.validations.count.should == 2
16
+ TestAdding.validations[:email].should be_instance_of Validation
17
+ TestAdding.validations[:another].should be_instance_of Validation
18
+ end
19
+ it "should be able to smartly determine the method to use" do
20
+ validation = TestAdding.find(:email)
21
+ validation.name.should == :email
22
+ validation.regex.should == /email/i
23
+ validation = TestAdding.find(:non_existent_validation, :using => :email)
24
+ validation.name.should == :email
25
+ validation.regex.should == /email/i
26
+ end
27
+ it "should raise an error if the method does not exist" do
28
+ expect { TestAdding.find(:fake) }.to raise_error MissingValidation
29
+ end
30
+ it "should be able to determine if the method exists" do
31
+ TestAdding.exists?(:email).should be_true
32
+ TestAdding.exists?(:non_existent).should be_false
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,36 @@
1
+ require 'validates_formatting_of/validation'
2
+
3
+ module ValidatesFormattingOf
4
+
5
+ describe Validation do
6
+ context "valid validation creation" do
7
+ let(:validation) { Validation.new(:name, /something/i, "is an invalid value") }
8
+ it "should receive the right parameters" do
9
+ validation.name.should == :name
10
+ validation.regex.should == %r{something}i
11
+ validation.message.should == 'is an invalid value'
12
+ end
13
+ it "should print properly" do
14
+ validation.to_s.should == "<Validation::name>"
15
+ end
16
+ it "should be inspected properly" do
17
+ validation.inspect.should =~ /Validation/
18
+ validation.inspect.should =~ /\/something\/i/
19
+ validation.inspect.should =~ /\:name/
20
+ end
21
+ end
22
+ context "invalid validation creation" do
23
+ it "should raise an error if the specified regex is not a Regexp objct" do
24
+ expect { Validation.new(:name, 123, "is an invalid value") }.to raise_error InvalidRegularExpression
25
+ end
26
+ it "should not raise an error if the specified regex is a proc or a lambda" do
27
+ expect { Validation.new(:name, lambda { "my record" }, "is an invalid value") }.not_to raise_error InvalidRegularExpression
28
+ expect { Validation.new(:name, proc { "my record" }, "is an invalid value") }.not_to raise_error InvalidRegularExpression
29
+ end
30
+ it "should not raise an error if the regex if valid" do
31
+ expect { Validation.new(:name, /something/i, "is an invalid value") }.not_to raise_error InvalidRegularExpression
32
+ end
33
+ end
34
+ end
35
+
36
+ end
@@ -19,5 +19,5 @@ Gem::Specification.new do |gem|
19
19
 
20
20
  gem.add_development_dependency "rake"
21
21
  gem.add_development_dependency "rspec"
22
- gem.add_development_dependency "supermodel"
22
+ gem.add_development_dependency "simplecov"
23
23
  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.6.2
4
+ version: 0.6.9
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-07-10 00:00:00.000000000 Z
12
+ date: 2012-07-16 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activemodel
@@ -60,7 +60,7 @@ dependencies:
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
62
  - !ruby/object:Gem::Dependency
63
- name: supermodel
63
+ name: simplecov
64
64
  requirement: !ruby/object:Gem::Requirement
65
65
  none: false
66
66
  requirements:
@@ -91,13 +91,16 @@ files:
91
91
  - README.markdown
92
92
  - Rakefile
93
93
  - lib/validates_formatting_of.rb
94
+ - lib/validates_formatting_of/method.rb
94
95
  - lib/validates_formatting_of/model_additions.rb
95
96
  - lib/validates_formatting_of/railtie.rb
96
- - lib/validates_formatting_of/validating_methods.rb
97
- - lib/validates_formatting_of/validation_messages.rb
97
+ - lib/validates_formatting_of/validation.rb
98
+ - lib/validates_formatting_of/validation_addition.rb
98
99
  - lib/validates_formatting_of/version.rb
99
100
  - spec/spec_helper.rb
100
101
  - spec/validates_formatting_of/model_additions_spec.rb
102
+ - spec/validates_formatting_of/validation_addition_spec.rb
103
+ - spec/validates_formatting_of/validation_spec.rb
101
104
  - validates_formatting_of.gemspec
102
105
  homepage: https://github.com/mattdbridges/validates_formatting_of
103
106
  licenses: []
@@ -127,3 +130,5 @@ summary: Adds several convenient methods to validate things such as emails, urls
127
130
  test_files:
128
131
  - spec/spec_helper.rb
129
132
  - spec/validates_formatting_of/model_additions_spec.rb
133
+ - spec/validates_formatting_of/validation_addition_spec.rb
134
+ - spec/validates_formatting_of/validation_spec.rb
@@ -1,82 +0,0 @@
1
- module ValidatesFormattingOf
2
- class ValidatingMethods
3
- class << self
4
-
5
- # This method is very close to allowing what is specified in RFC 5322 and RFC 5321
6
- def email
7
- %r{\A([^@\s]+)@((?:(?!-)[-a-z0-9]+(?<!-)\.)+[a-z]{2,})\Z}i
8
- end
9
-
10
- # Thie version of the email exists to support common validation libraries (such
11
- # as client_side_validations) that require access to Rails' validation. Look-behinds
12
- # are not supported in javascript.
13
- def simple_email
14
- %r{\A([^@\s]+)@((?:(?!-)[-a-z0-9]+(?<!-)\.)+[a-z]{2,})\Z}i
15
- end
16
-
17
- # Taken from Ryan Bates' screencast on extracting gems. Works extremely well. Thanks Ryan!
18
- # (slightly revised to work on MRI 1.8.7 and ree)
19
- def url
20
- %r{\Ahttps?:\/\/([^\s:@]+:[^\s:@]*@)?[A-Za-z\d\-]+(\.[A-Za-z\d\-]+)+\.?(:\d{1,5})?([\/?]\S*)?\Z}i
21
- end
22
-
23
- # No numbers of symbols. allows "-"
24
- def alpha
25
- %r{\A([^\d\W]|[-])*\Z}
26
- end
27
-
28
- # Letters, numbers, and spaces
29
- def alphanum
30
- %r{\A[A-Z0-9\s]+\Z}i
31
- end
32
-
33
- # Visa, Mastercard, Discver, and American Express
34
- def credit_card
35
- %r{\A((4\d{3})|(5[1-5]\d{2})|(6011))-?\d{4}-?\d{4}-?\d{4}|3[4,7]\d{13}\Z}
36
- end
37
-
38
- # US Zip code. ##### or #####-####
39
- def us_zip
40
- %r{\A\d{5}(-\d{4})?\Z}
41
- end
42
-
43
- # US Phone numbers.
44
- # Examples of valid formats:
45
- # * ###.###.####
46
- # * ###-###-####
47
- # * (###) ###-####
48
- # * (###)###-####
49
- # * #########
50
- # * ### ###-####
51
- def us_phone
52
- %r{\A(\((\d{3})\)|\d{3})[ |\.|\-]?(\d{3})[ |\.|\-]?(\d{4})\Z}
53
- end
54
-
55
- # IP Address validation
56
- def ip_address
57
- warn "[DEPRECATION] The :ip_address validation for `valdiates_formatting_of` is DEPRECATED. Please update your model validations to use :ip_address_v4. This method will be removed by version 0.7.0."
58
- ip_address_v4
59
- end
60
-
61
- def ip_address_v4
62
- %r{\A(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\Z}
63
- end
64
-
65
- # Social Security Number pattern
66
- def ssn
67
- %r{\A\d{3}([-.]){1}\d{2}([-.]){1}\d{4}\Z}
68
- end
69
-
70
- # Matches CSS colors either in three or six digit formats
71
- def hex_color
72
- %r{\A([A-F0-9]{6}|[A-F0-9]{3})\Z}i
73
- end
74
-
75
- # Ensures that what value is passed is a dollar amount of some kind
76
- def dollars
77
- %r{\A\$?(\d{1,3}(\,\d{3})*|(\d+))(\.\d{2})?\Z}
78
- end
79
-
80
- end
81
- end
82
- end
@@ -1,24 +0,0 @@
1
- module ValidatesFormattingOf
2
- class ValidationMessages
3
-
4
- Messages = {
5
- :email => "is not a valid email",
6
- :simple_email => "is not a valid email",
7
- :url => "is not a valid URL",
8
- :alpha => "must be only letters or dashes",
9
- :alphanum => "must be letters, numbers",
10
- :credit_card => "is not a valid credit card number",
11
- :us_zip => "is not a valid zipcode",
12
- :us_phone => "is not a valid phone number",
13
- :ip_address => "is not a valid IP address",
14
- :ssn => "is not a valid social security number",
15
- :hex_color => "is not a valid hex color",
16
- :dollars => "is not a valid dollar amount"
17
- }
18
-
19
- def self.message(message)
20
- Messages.fetch(message.to_s.downcase.to_sym, "is not valid")
21
- end
22
-
23
- end
24
- end