validates_timeliness 2.3.2 → 3.0.0.beta
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/CHANGELOG +12 -4
- data/LICENSE +1 -1
- data/README.rdoc +138 -280
- data/Rakefile +30 -16
- data/lib/generators/validates_timeliness/install_generator.rb +17 -0
- data/lib/generators/validates_timeliness/templates/en.yml +16 -0
- data/lib/generators/validates_timeliness/templates/validates_timeliness.rb +22 -0
- data/lib/validates_timeliness.rb +46 -52
- data/lib/validates_timeliness/attribute_methods.rb +51 -0
- data/lib/validates_timeliness/conversion.rb +69 -0
- data/lib/validates_timeliness/extensions.rb +14 -0
- data/lib/validates_timeliness/extensions/date_time_select.rb +45 -0
- data/lib/validates_timeliness/extensions/multiparameter_handler.rb +31 -0
- data/lib/validates_timeliness/helper_methods.rb +41 -0
- data/lib/validates_timeliness/orms/active_record.rb +14 -0
- data/lib/validates_timeliness/parser.rb +389 -17
- data/lib/validates_timeliness/validator.rb +37 -200
- data/lib/validates_timeliness/version.rb +1 -1
- data/spec/model_helpers.rb +27 -0
- data/spec/spec_helper.rb +74 -43
- data/spec/test_model.rb +56 -0
- data/spec/validates_timeliness/attribute_methods_spec.rb +36 -0
- data/spec/validates_timeliness/conversion_spec.rb +204 -0
- data/spec/validates_timeliness/extensions/date_time_select_spec.rb +178 -0
- data/spec/validates_timeliness/extensions/multiparameter_handler_spec.rb +21 -0
- data/spec/validates_timeliness/helper_methods_spec.rb +36 -0
- data/spec/{formats_spec.rb → validates_timeliness/parser_spec.rb} +105 -71
- data/spec/validates_timeliness/validator/after_spec.rb +59 -0
- data/spec/validates_timeliness/validator/before_spec.rb +59 -0
- data/spec/validates_timeliness/validator/is_at_spec.rb +63 -0
- data/spec/validates_timeliness/validator/on_or_after_spec.rb +59 -0
- data/spec/validates_timeliness/validator/on_or_before_spec.rb +59 -0
- data/spec/validates_timeliness/validator_spec.rb +172 -0
- data/validates_timeliness.gemspec +30 -0
- metadata +42 -40
- data/TODO +0 -8
- data/lib/validates_timeliness/action_view/instance_tag.rb +0 -52
- data/lib/validates_timeliness/active_record/attribute_methods.rb +0 -77
- data/lib/validates_timeliness/active_record/multiparameter_attributes.rb +0 -69
- data/lib/validates_timeliness/formats.rb +0 -368
- data/lib/validates_timeliness/locale/en.new.yml +0 -18
- data/lib/validates_timeliness/locale/en.old.yml +0 -18
- data/lib/validates_timeliness/matcher.rb +0 -1
- data/lib/validates_timeliness/spec/rails/matchers/validate_timeliness.rb +0 -162
- data/lib/validates_timeliness/validation_methods.rb +0 -46
- data/spec/action_view/instance_tag_spec.rb +0 -194
- data/spec/active_record/attribute_methods_spec.rb +0 -157
- data/spec/active_record/multiparameter_attributes_spec.rb +0 -118
- data/spec/ginger_scenarios.rb +0 -19
- data/spec/parser_spec.rb +0 -65
- data/spec/resources/application.rb +0 -2
- data/spec/resources/person.rb +0 -3
- data/spec/resources/schema.rb +0 -10
- data/spec/resources/sqlite_patch.rb +0 -19
- data/spec/spec/rails/matchers/validate_timeliness_spec.rb +0 -245
- data/spec/time_travel/MIT-LICENSE +0 -20
- data/spec/time_travel/time_extensions.rb +0 -33
- data/spec/time_travel/time_travel.rb +0 -12
- data/spec/validator_spec.rb +0 -723
@@ -1,34 +1,34 @@
|
|
1
|
-
require
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
|
-
describe ValidatesTimeliness::
|
3
|
+
describe ValidatesTimeliness::Parser do
|
4
4
|
|
5
5
|
describe "format proc generator" do
|
6
6
|
it "should generate proc which outputs date array with values in correct order" do
|
7
|
-
|
7
|
+
generate_method('yyyy-mm-dd').call('2000', '1', '2').should == [2000,1,2,0,0,0,0]
|
8
8
|
end
|
9
9
|
|
10
10
|
it "should generate proc which outputs date array from format with different order" do
|
11
|
-
|
11
|
+
generate_method('dd/mm/yyyy').call('2', '1', '2000').should == [2000,1,2,0,0,0,0]
|
12
12
|
end
|
13
13
|
|
14
14
|
it "should generate proc which outputs time array" do
|
15
|
-
|
15
|
+
generate_method('hh:nn:ss').call('01', '02', '03').should == [0,0,0,1,2,3,0]
|
16
16
|
end
|
17
17
|
|
18
18
|
it "should generate proc which outputs time array with meridian 'pm' adjusted hour" do
|
19
|
-
|
19
|
+
generate_method('hh:nn:ss ampm').call('01', '02', '03', 'pm').should == [0,0,0,13,2,3,0]
|
20
20
|
end
|
21
21
|
|
22
22
|
it "should generate proc which outputs time array with meridian 'am' unadjusted hour" do
|
23
|
-
|
23
|
+
generate_method('hh:nn:ss ampm').call('01', '02', '03', 'am').should == [0,0,0,1,2,3,0]
|
24
24
|
end
|
25
25
|
|
26
26
|
it "should generate proc which outputs time array with microseconds" do
|
27
|
-
|
27
|
+
generate_method('hh:nn:ss.u').call('01', '02', '03', '99').should == [0,0,0,1,2,3,990000]
|
28
28
|
end
|
29
29
|
|
30
30
|
it "should generate proc which outputs datetime array with zone offset" do
|
31
|
-
|
31
|
+
generate_method('yyyy-mm-dd hh:nn:ss.u zo').call('2001', '02', '03', '04', '05', '06', '99', '+10:00').should == [2001,2,3,4,5,6,990000,36000]
|
32
32
|
end
|
33
33
|
end
|
34
34
|
|
@@ -95,115 +95,148 @@ describe ValidatesTimeliness::Formats do
|
|
95
95
|
end
|
96
96
|
end
|
97
97
|
|
98
|
-
describe "
|
98
|
+
describe "_parse" do
|
99
99
|
|
100
100
|
it "should return time array from date string" do
|
101
|
-
time_array = formats.
|
101
|
+
time_array = formats._parse('12:13:14', :time, :strict => true)
|
102
102
|
time_array.should == [2000,1,1,12,13,14,0]
|
103
103
|
end
|
104
104
|
|
105
105
|
it "should return nil if time hour is out of range for AM meridian" do
|
106
|
-
time_array = formats.
|
106
|
+
time_array = formats._parse('13:14 am', :time, :strict => true)
|
107
107
|
time_array.should == nil
|
108
|
-
time_array = formats.
|
108
|
+
time_array = formats._parse('00:14 am', :time, :strict => true)
|
109
109
|
time_array.should == nil
|
110
110
|
end
|
111
111
|
|
112
112
|
it "should return date array from time string" do
|
113
|
-
time_array = formats.
|
113
|
+
time_array = formats._parse('2000-02-01', :date, :strict => true)
|
114
114
|
time_array.should == [2000,2,1,0,0,0,0]
|
115
115
|
end
|
116
116
|
|
117
117
|
it "should return datetime array from string value" do
|
118
|
-
time_array = formats.
|
118
|
+
time_array = formats._parse('2000-02-01 12:13:14', :datetime, :strict => true)
|
119
119
|
time_array.should == [2000,2,1,12,13,14,0]
|
120
120
|
end
|
121
121
|
|
122
122
|
it "should parse date string when type is datetime" do
|
123
|
-
time_array = formats.
|
123
|
+
time_array = formats._parse('2000-02-01', :datetime, :strict => false)
|
124
124
|
time_array.should == [2000,2,1,0,0,0,0]
|
125
125
|
end
|
126
126
|
|
127
127
|
it "should ignore time when extracting date and strict is false" do
|
128
|
-
time_array = formats.
|
128
|
+
time_array = formats._parse('2000-02-01 12:13', :date, :strict => false)
|
129
129
|
time_array.should == [2000,2,1,0,0,0,0]
|
130
130
|
end
|
131
131
|
|
132
132
|
it "should ignore time when extracting date from format with trailing year and strict is false" do
|
133
|
-
time_array = formats.
|
133
|
+
time_array = formats._parse('01-02-2000 12:13', :date, :strict => false)
|
134
134
|
time_array.should == [2000,2,1,0,0,0,0]
|
135
135
|
end
|
136
136
|
|
137
137
|
it "should ignore date when extracting time and strict is false" do
|
138
|
-
time_array = formats.
|
138
|
+
time_array = formats._parse('2000-02-01 12:13', :time, :strict => false)
|
139
139
|
time_array.should == [2000,1,1,12,13,0,0]
|
140
140
|
end
|
141
141
|
|
142
142
|
it "should return zone offset when :include_offset option is true" do
|
143
|
-
time_array = formats.
|
143
|
+
time_array = formats._parse('2000-02-01T12:13:14-10:30', :datetime, :include_offset => true)
|
144
144
|
time_array.should == [2000,2,1,12,13,14,0,-37800]
|
145
145
|
end
|
146
|
-
end
|
147
146
|
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
147
|
+
context "with format option" do
|
148
|
+
it "should return values if string matches specified format" do
|
149
|
+
time_array = formats._parse('2000-02-01 12:13:14', :datetime, :format => 'yyyy-mm-dd hh:nn:ss')
|
150
|
+
time_array.should == [2000,2,1,12,13,14,0]
|
151
|
+
end
|
153
152
|
|
154
|
-
|
155
|
-
|
156
|
-
|
153
|
+
it "should return nil if string does not match specified format" do
|
154
|
+
time_array = formats._parse('2000-02-01 12:13', :datetime, :format => 'yyyy-mm-dd hh:nn:ss')
|
155
|
+
time_array.should be_nil
|
156
|
+
end
|
157
157
|
end
|
158
|
-
end
|
159
158
|
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
159
|
+
context "date with ambiguous year" do
|
160
|
+
it "should return year in current century if year below threshold" do
|
161
|
+
time_array = formats._parse('01-02-29', :date)
|
162
|
+
time_array.should == [2029,2,1,0,0,0,0]
|
163
|
+
end
|
165
164
|
|
166
|
-
|
167
|
-
|
168
|
-
|
165
|
+
it "should return year in last century if year at or above threshold" do
|
166
|
+
time_array = formats._parse('01-02-30', :date)
|
167
|
+
time_array.should == [1930,2,1,0,0,0,0]
|
168
|
+
end
|
169
|
+
|
170
|
+
it "should allow custom threshold" do
|
171
|
+
default = ValidatesTimeliness::Parser.ambiguous_year_threshold
|
172
|
+
ValidatesTimeliness::Parser.ambiguous_year_threshold = 40
|
173
|
+
time_array = formats._parse('01-02-39', :date)
|
174
|
+
time_array.should == [2039,2,1,0,0,0,0]
|
175
|
+
time_array = formats._parse('01-02-40', :date)
|
176
|
+
time_array.should == [1940,2,1,0,0,0,0]
|
177
|
+
ValidatesTimeliness::Parser.ambiguous_year_threshold = default
|
178
|
+
end
|
169
179
|
end
|
170
180
|
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
181
|
+
context "with custom dummy date values" do
|
182
|
+
before(:all) do
|
183
|
+
@old_dummy_date = ValidatesTimeliness.dummy_date_for_time_type
|
184
|
+
ValidatesTimeliness.dummy_date_for_time_type = [2009,1,1]
|
185
|
+
end
|
186
|
+
|
187
|
+
it "should return time array with custom dummy date" do
|
188
|
+
time_array = formats._parse('12:13:14', :time, :strict => true)
|
189
|
+
time_array.should == [2009,1,1,12,13,14,0]
|
190
|
+
end
|
191
|
+
|
192
|
+
after(:all) do
|
193
|
+
ValidatesTimeliness.dummy_date_for_time_type = @old_dummy_date
|
194
|
+
end
|
179
195
|
end
|
180
196
|
end
|
181
197
|
|
182
|
-
describe "parse
|
183
|
-
|
184
|
-
|
185
|
-
formats.dummy_date_for_time_type = [2009,1,1]
|
198
|
+
describe "parse" do
|
199
|
+
it "should return time object for valid time string" do
|
200
|
+
parse("2000-01-01 12:13:14", :datetime).should be_kind_of(Time)
|
186
201
|
end
|
187
|
-
|
188
|
-
it "should return time
|
189
|
-
|
190
|
-
|
202
|
+
|
203
|
+
it "should return nil for time string with invalid date part" do
|
204
|
+
parse("2000-02-30 12:13:14", :datetime).should be_nil
|
205
|
+
end
|
206
|
+
|
207
|
+
it "should return nil for time string with invalid time part" do
|
208
|
+
parse("2000-02-01 25:13:14", :datetime).should be_nil
|
209
|
+
end
|
210
|
+
|
211
|
+
it "should return Time object when passed a Time object" do
|
212
|
+
parse(Time.now, :datetime).should be_kind_of(Time)
|
213
|
+
end
|
214
|
+
|
215
|
+
it "should convert time string into current timezone" do
|
216
|
+
Time.zone = 'Melbourne'
|
217
|
+
time = parse("2000-01-01 12:13:14", :datetime, :timezone_aware => true)
|
218
|
+
Time.zone.utc_offset.should == 10.hours
|
191
219
|
end
|
192
220
|
|
193
|
-
|
194
|
-
|
221
|
+
it "should return nil for invalid date string" do
|
222
|
+
parse("2000-02-30", :date).should be_nil
|
223
|
+
end
|
224
|
+
|
225
|
+
def parse(*args)
|
226
|
+
ValidatesTimeliness::Parser.parse(*args)
|
195
227
|
end
|
196
228
|
end
|
197
229
|
|
198
|
-
describe "
|
199
|
-
it "should
|
200
|
-
|
201
|
-
|
230
|
+
describe "make_time" do
|
231
|
+
it "should create time using current timezone" do
|
232
|
+
time = ValidatesTimeliness::Parser.make_time([2000,1,1,12,0,0])
|
233
|
+
time.zone.should == "UTC"
|
202
234
|
end
|
203
235
|
|
204
|
-
it "should
|
205
|
-
|
206
|
-
|
236
|
+
it "should create time using current timezone" do
|
237
|
+
Time.zone = 'Melbourne'
|
238
|
+
time = ValidatesTimeliness::Parser.make_time([2000,1,1,12,0,0], true)
|
239
|
+
time.zone.should == "EST"
|
207
240
|
end
|
208
241
|
end
|
209
242
|
|
@@ -248,7 +281,7 @@ describe ValidatesTimeliness::Formats do
|
|
248
281
|
it "should add format before specified format and be higher precedence" do
|
249
282
|
formats.add_formats(:time, "ss:hh:nn", :before => 'hh:nn:ss')
|
250
283
|
validate("59:23:58", :time).should be_true
|
251
|
-
time_array = formats.
|
284
|
+
time_array = formats._parse('59:23:58', :time)
|
252
285
|
time_array.should == [2000,1,1,23,58,59,0]
|
253
286
|
end
|
254
287
|
|
@@ -269,10 +302,10 @@ describe ValidatesTimeliness::Formats do
|
|
269
302
|
|
270
303
|
describe "removing US formats" do
|
271
304
|
it "should validate a date as European format when US formats removed" do
|
272
|
-
time_array = formats.
|
305
|
+
time_array = formats._parse('01/02/2000', :date)
|
273
306
|
time_array.should == [2000, 1, 2,0,0,0,0]
|
274
307
|
formats.remove_us_formats
|
275
|
-
time_array = formats.
|
308
|
+
time_array = formats._parse('01/02/2000', :date)
|
276
309
|
time_array.should == [2000, 2, 1,0,0,0,0]
|
277
310
|
end
|
278
311
|
|
@@ -283,7 +316,7 @@ describe ValidatesTimeliness::Formats do
|
|
283
316
|
|
284
317
|
|
285
318
|
def formats
|
286
|
-
ValidatesTimeliness::
|
319
|
+
ValidatesTimeliness::Parser
|
287
320
|
end
|
288
321
|
|
289
322
|
def validate(time_string, type)
|
@@ -296,15 +329,16 @@ describe ValidatesTimeliness::Formats do
|
|
296
329
|
|
297
330
|
def generate_regexp(format)
|
298
331
|
# wrap in line start and end anchors to emulate extract values method
|
299
|
-
/\A#{formats.send(:generate_format_expression, format)
|
332
|
+
/\A#{formats.send(:generate_format_expression, format)}\Z/
|
300
333
|
end
|
301
334
|
|
302
335
|
def generate_regexp_str(format)
|
303
|
-
formats.send(:generate_format_expression, format)
|
336
|
+
formats.send(:generate_format_expression, format).inspect
|
304
337
|
end
|
305
338
|
|
306
|
-
def
|
307
|
-
formats.send(:generate_format_expression, format)
|
339
|
+
def generate_method(format)
|
340
|
+
formats.send(:generate_format_expression, format)
|
341
|
+
ValidatesTimeliness::Parser.method(:"format_#{format}")
|
308
342
|
end
|
309
343
|
|
310
344
|
def delete_format(type, format)
|
@@ -0,0 +1,59 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe ValidatesTimeliness::Validator, ":after option" do
|
4
|
+
include ModelHelpers
|
5
|
+
|
6
|
+
describe "for date type" do
|
7
|
+
before do
|
8
|
+
Person.validates_date :birth_date, :after => Date.new(2010, 1, 1)
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should not be valid for same date value" do
|
12
|
+
invalid!(:birth_date, Date.new(2010, 1, 1), 'must be after 2010-01-01')
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should not be valid for date before restriction" do
|
16
|
+
invalid!(:birth_date, Date.new(2009, 12, 31), 'must be after 2010-01-01')
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should be valid for date after restriction" do
|
20
|
+
valid!(:birth_date, Date.new(2010, 1, 2))
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
describe "for time type" do
|
25
|
+
before do
|
26
|
+
Person.validates_time :birth_time, :after => Time.mktime(2000, 1, 1, 12, 0, 0)
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should not be valid for same time as restriction" do
|
30
|
+
invalid!(:birth_time, Time.local_time(2000, 1, 1, 12, 0, 0), 'must be after 12:00:00')
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should not be valid for time before restriction" do
|
34
|
+
invalid!(:birth_time, Time.local_time(2000, 1, 1, 11, 59, 59), 'must be after 12:00:00')
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should be valid for time after restriction" do
|
38
|
+
valid!(:birth_time, Time.local_time(2000, 1, 1, 12, 00, 01))
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
describe "for datetime type" do
|
43
|
+
before do
|
44
|
+
Person.validates_datetime :birth_datetime, :after => DateTime.civil_from_format(:local, 2010, 1, 1, 12, 0, 0)
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should not be valid for same datetime as restriction" do
|
48
|
+
invalid!(:birth_datetime, DateTime.civil_from_format(:local, 2010, 1, 1, 12, 0, 0), 'must be after 2010-01-01 12:00:00')
|
49
|
+
end
|
50
|
+
|
51
|
+
it "should be valid for datetime is before restriction" do
|
52
|
+
invalid!(:birth_datetime, DateTime.civil_from_format(:local, 2010, 1, 1, 11, 59, 59), 'must be after 2010-01-01 12:00:00')
|
53
|
+
end
|
54
|
+
|
55
|
+
it "should be valid for datetime is after restriction" do
|
56
|
+
valid!(:birth_datetime, DateTime.civil_from_format(:local, 2010, 1, 1, 12, 0, 1))
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe ValidatesTimeliness::Validator, ":before option" do
|
4
|
+
include ModelHelpers
|
5
|
+
|
6
|
+
describe "for date type" do
|
7
|
+
before do
|
8
|
+
Person.validates_date :birth_date, :before => Date.new(2010, 1, 1)
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should not be valid for date after restriction" do
|
12
|
+
invalid!(:birth_date, Date.new(2010, 1, 2), 'must be before 2010-01-01')
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should not be valid for same date value" do
|
16
|
+
invalid!(:birth_date, Date.new(2010, 1, 1), 'must be before 2010-01-01')
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should be valid for date before restriction" do
|
20
|
+
valid!(:birth_date, Date.new(2009, 12, 31))
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
describe "for time type" do
|
25
|
+
before do
|
26
|
+
Person.validates_time :birth_time, :before => Time.mktime(2000, 1, 1, 12, 0, 0)
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should not be valid for time after restriction" do
|
30
|
+
invalid!(:birth_time, Time.local_time(2000, 1, 1, 12, 00, 01), 'must be before 12:00:00')
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should not be valid for same time as restriction" do
|
34
|
+
invalid!(:birth_time, Time.local_time(2000, 1, 1, 12, 0, 0), 'must be before 12:00:00')
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should be valid for time before restriction" do
|
38
|
+
valid!(:birth_time, Time.local_time(2000, 1, 1, 11, 59, 59))
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
describe "for datetime type" do
|
43
|
+
before do
|
44
|
+
Person.validates_datetime :birth_datetime, :before => DateTime.civil_from_format(:local, 2010, 1, 1, 12, 0, 0)
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should not be valid for datetime after restriction" do
|
48
|
+
invalid!(:birth_datetime, DateTime.civil_from_format(:local, 2010, 1, 1, 12, 0, 1), 'must be before 2010-01-01 12:00:00')
|
49
|
+
end
|
50
|
+
|
51
|
+
it "should not be valid for same datetime as restriction" do
|
52
|
+
invalid!(:birth_datetime, DateTime.civil_from_format(:local, 2010, 1, 1, 12, 0, 0), 'must be before 2010-01-01 12:00:00')
|
53
|
+
end
|
54
|
+
|
55
|
+
it "should be valid for datetime before restriction" do
|
56
|
+
valid!(:birth_datetime, DateTime.civil_from_format(:local, 2010, 1, 1, 11, 59, 59))
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe ValidatesTimeliness::Validator, ":is_at option" do
|
4
|
+
include ModelHelpers
|
5
|
+
|
6
|
+
before do
|
7
|
+
Timecop.freeze(Time.local_time(2010, 1, 1, 0, 0, 0))
|
8
|
+
end
|
9
|
+
|
10
|
+
describe "for date type" do
|
11
|
+
before do
|
12
|
+
Person.validates_date :birth_date, :is_at => Date.new(2010, 1, 1)
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should not be valid for date before restriction" do
|
16
|
+
invalid!(:birth_date, Date.new(2009, 12, 31), 'must be at 2010-01-01')
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should not be valid for date after restriction" do
|
20
|
+
invalid!(:birth_date, Date.new(2010, 1, 2), 'must be at 2010-01-01')
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should be valid for same date value" do
|
24
|
+
valid!(:birth_date, Date.new(2010, 1, 1))
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
describe "for time type" do
|
29
|
+
before do
|
30
|
+
Person.validates_time :birth_time, :is_at => Time.mktime(2000, 1, 1, 12, 0, 0)
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should not be valid for time before restriction" do
|
34
|
+
invalid!(:birth_time, Time.local_time(2000, 1, 1, 11, 59, 59), 'must be at 12:00:00')
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should not be valid for time after restriction" do
|
38
|
+
invalid!(:birth_time, Time.local_time(2000, 1, 1, 12, 00, 01), 'must be at 12:00:00')
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should be valid for same time as restriction" do
|
42
|
+
valid!(:birth_time, Time.local_time(2000, 1, 1, 12, 0, 0))
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
describe "for datetime type" do
|
47
|
+
before do
|
48
|
+
Person.validates_datetime :birth_datetime, :is_at => DateTime.civil_from_format(:local, 2010, 1, 1, 12, 0, 0)
|
49
|
+
end
|
50
|
+
|
51
|
+
it "should not be valid for datetime before restriction" do
|
52
|
+
invalid!(:birth_datetime, DateTime.civil_from_format(:local, 2010, 1, 1, 11, 59, 59), 'must be at 2010-01-01 12:00:00')
|
53
|
+
end
|
54
|
+
|
55
|
+
it "should not be valid for datetime after restriction" do
|
56
|
+
invalid!(:birth_datetime, DateTime.civil_from_format(:local, 2010, 1, 1, 12, 0, 1), 'must be at 2010-01-01 12:00:00')
|
57
|
+
end
|
58
|
+
|
59
|
+
it "should be valid for same datetime as restriction" do
|
60
|
+
valid!(:birth_datetime, DateTime.civil_from_format(:local, 2010, 1, 1, 12, 0, 0))
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|