validates_timeliness 2.2.2 → 2.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +12 -3
- data/README.rdoc +54 -45
- data/Rakefile +5 -9
- data/TODO +3 -0
- data/lib/validates_timeliness.rb +6 -6
- data/lib/validates_timeliness/action_view/instance_tag.rb +27 -23
- data/lib/validates_timeliness/active_record/attribute_methods.rb +5 -3
- data/lib/validates_timeliness/active_record/multiparameter_attributes.rb +7 -8
- data/lib/validates_timeliness/formats.rb +55 -56
- data/lib/validates_timeliness/locale/en.yml +1 -1
- data/lib/validates_timeliness/spec/rails/matchers/validate_timeliness.rb +38 -39
- data/lib/validates_timeliness/validator.rb +31 -34
- data/lib/validates_timeliness/version.rb +1 -1
- data/spec/action_view/instance_tag_spec.rb +177 -25
- data/spec/active_record/attribute_methods_spec.rb +18 -16
- data/spec/active_record/multiparameter_attributes_spec.rb +90 -24
- data/spec/formats_spec.rb +67 -55
- data/spec/ginger_scenarios.rb +3 -3
- data/spec/spec/rails/matchers/validate_timeliness_spec.rb +52 -52
- data/spec/spec_helper.rb +3 -1
- data/spec/validator_spec.rb +88 -25
- metadata +19 -19
data/spec/spec_helper.rb
CHANGED
@@ -13,7 +13,7 @@ if vendored = File.exists?(vendored_rails)
|
|
13
13
|
Dir.glob(vendored_rails + "/**/lib").each { |dir| $:.unshift dir }
|
14
14
|
else
|
15
15
|
begin
|
16
|
-
require 'ginger'
|
16
|
+
require 'ginger'
|
17
17
|
rescue LoadError
|
18
18
|
end
|
19
19
|
if ENV['VERSION']
|
@@ -47,6 +47,8 @@ end
|
|
47
47
|
require 'validates_timeliness'
|
48
48
|
require 'validates_timeliness/matcher'
|
49
49
|
|
50
|
+
ValidatesTimeliness.enable_datetime_select_extension!
|
51
|
+
|
50
52
|
ActiveRecord::Migration.verbose = false
|
51
53
|
ActiveRecord::Base.establish_connection({:adapter => 'sqlite3', :database => ':memory:'})
|
52
54
|
|
data/spec/validator_spec.rb
CHANGED
@@ -12,13 +12,17 @@ describe ValidatesTimeliness::Validator do
|
|
12
12
|
Time.now = nil
|
13
13
|
end
|
14
14
|
|
15
|
-
|
16
|
-
@person
|
15
|
+
def person
|
16
|
+
@person ||= Person.new
|
17
17
|
end
|
18
18
|
|
19
19
|
describe "option keys validation" do
|
20
|
+
before(:all) do
|
21
|
+
ActiveSupport::Deprecation.silenced = true
|
22
|
+
end
|
23
|
+
|
20
24
|
before do
|
21
|
-
keys = ValidatesTimeliness::Validator::
|
25
|
+
keys = ValidatesTimeliness::Validator::VALID_OPTION_KEYS - [:invalid_date_message, :invalid_time_message, :with_date, :with_time]
|
22
26
|
@valid_options = keys.inject({}) {|hash, opt| hash[opt] = nil; hash }
|
23
27
|
end
|
24
28
|
|
@@ -30,6 +34,15 @@ describe ValidatesTimeliness::Validator do
|
|
30
34
|
it "should not raise error if option keys are valid" do
|
31
35
|
lambda { Person.validates_datetime(@valid_options) }.should_not raise_error(ArgumentError)
|
32
36
|
end
|
37
|
+
|
38
|
+
it "should display deprecation notice for :equal_to" do
|
39
|
+
::ActiveSupport::Deprecation.should_receive(:warn)
|
40
|
+
Person.validates_datetime :equal_to => Time.now
|
41
|
+
end
|
42
|
+
|
43
|
+
after(:all) do
|
44
|
+
ActiveSupport::Deprecation.silenced = false
|
45
|
+
end
|
33
46
|
end
|
34
47
|
|
35
48
|
describe "evaluate_option_value" do
|
@@ -305,7 +318,7 @@ describe ValidatesTimeliness::Validator do
|
|
305
318
|
validate_with(:birth_date, 1.day.from_now.to_date)
|
306
319
|
should_have_no_error(:birth_date, :between)
|
307
320
|
end
|
308
|
-
|
321
|
+
|
309
322
|
it "should allow a range for between restriction" do
|
310
323
|
configure_validator(:type => :date, :between => (1.day.ago.to_date)..(1.day.from_now.to_date))
|
311
324
|
validate_with(:birth_date, 1.day.from_now.to_date)
|
@@ -346,53 +359,53 @@ describe ValidatesTimeliness::Validator do
|
|
346
359
|
end
|
347
360
|
end
|
348
361
|
|
349
|
-
describe "instance with :
|
362
|
+
describe "instance with :is_at restriction" do
|
350
363
|
|
351
364
|
describe "for datetime type" do
|
352
365
|
before do
|
353
|
-
configure_validator(:
|
366
|
+
configure_validator(:is_at => Time.now)
|
354
367
|
end
|
355
368
|
|
356
|
-
it "should have error when value not equal to :
|
369
|
+
it "should have error when value not equal to :is_at restriction" do
|
357
370
|
validate_with(:birth_date_and_time, Time.now + 1)
|
358
|
-
should_have_error(:birth_date_and_time, :
|
371
|
+
should_have_error(:birth_date_and_time, :is_at)
|
359
372
|
end
|
360
373
|
|
361
|
-
it "should be valid when value is equal to :
|
374
|
+
it "should be valid when value is equal to :is_at restriction" do
|
362
375
|
validate_with(:birth_date_and_time, Time.now)
|
363
|
-
should_have_no_error(:birth_date_and_time, :
|
376
|
+
should_have_no_error(:birth_date_and_time, :is_at)
|
364
377
|
end
|
365
378
|
end
|
366
379
|
|
367
380
|
describe "for date type" do
|
368
381
|
before do
|
369
|
-
configure_validator(:type => :date, :
|
382
|
+
configure_validator(:type => :date, :is_at => Date.today)
|
370
383
|
end
|
371
384
|
|
372
|
-
it "should have error when value is not equal to :
|
385
|
+
it "should have error when value is not equal to :is_at restriction" do
|
373
386
|
validate_with(:birth_date, Date.today + 1)
|
374
|
-
should_have_error(:birth_date, :
|
387
|
+
should_have_error(:birth_date, :is_at)
|
375
388
|
end
|
376
389
|
|
377
|
-
it "should be valid when value is equal to :
|
390
|
+
it "should be valid when value is equal to :is_at restriction" do
|
378
391
|
validate_with(:birth_date, Date.today)
|
379
|
-
should_have_no_error(:birth_date, :
|
392
|
+
should_have_no_error(:birth_date, :is_at)
|
380
393
|
end
|
381
394
|
end
|
382
395
|
|
383
396
|
describe "for time type" do
|
384
397
|
before do
|
385
|
-
configure_validator(:type => :time, :
|
398
|
+
configure_validator(:type => :time, :is_at => "09:00:00")
|
386
399
|
end
|
387
400
|
|
388
|
-
it "should have error when value is not equal to :
|
401
|
+
it "should have error when value is not equal to :is_at restriction" do
|
389
402
|
validate_with(:birth_time, "09:00:01")
|
390
|
-
should_have_error(:birth_time, :
|
403
|
+
should_have_error(:birth_time, :is_at)
|
391
404
|
end
|
392
405
|
|
393
|
-
it "should be valid when value is equal to :
|
406
|
+
it "should be valid when value is equal to :is_at restriction" do
|
394
407
|
validate_with(:birth_time, "09:00:00")
|
395
|
-
should_have_no_error(:birth_time, :
|
408
|
+
should_have_no_error(:birth_time, :is_at)
|
396
409
|
end
|
397
410
|
end
|
398
411
|
end
|
@@ -400,9 +413,9 @@ describe ValidatesTimeliness::Validator do
|
|
400
413
|
describe "instance with :ignore_usec option" do
|
401
414
|
|
402
415
|
it "should ignore usec on time values when evaluated" do
|
403
|
-
configure_validator(:
|
416
|
+
configure_validator(:is_at => Time.utc(2000, 1, 1, 0, 0, 0, 0), :ignore_usec => true)
|
404
417
|
validate_with(:birth_date_and_time, Time.utc(2000, 1, 1, 0, 0, 0, 500))
|
405
|
-
should_have_no_error(:birth_date_and_time, :
|
418
|
+
should_have_no_error(:birth_date_and_time, :is_at)
|
406
419
|
end
|
407
420
|
|
408
421
|
end
|
@@ -422,9 +435,9 @@ describe ValidatesTimeliness::Validator do
|
|
422
435
|
end
|
423
436
|
|
424
437
|
it "should should ignore usec value on combined value if :ignore_usec option is true" do
|
425
|
-
configure_validator(:type => :date, :with_time => Time.mktime(2000,1,1,12,30,0,500), :
|
438
|
+
configure_validator(:type => :date, :with_time => Time.mktime(2000,1,1,12,30,0,500), :is_at => Time.mktime(2000,1,1,12,30), :ignore_usec => true)
|
426
439
|
validate_with(:birth_date, "2000-01-01")
|
427
|
-
should_have_no_error(:birth_date, :
|
440
|
+
should_have_no_error(:birth_date, :is_at)
|
428
441
|
end
|
429
442
|
end
|
430
443
|
|
@@ -496,6 +509,38 @@ describe ValidatesTimeliness::Validator do
|
|
496
509
|
end
|
497
510
|
end
|
498
511
|
|
512
|
+
if defined?(I18n)
|
513
|
+
|
514
|
+
describe "localized error messages" do
|
515
|
+
before(:all) do
|
516
|
+
translations = {
|
517
|
+
:activerecord => {:errors => {:messages => { :after => 'retfa {{restriction}}' }}},
|
518
|
+
:validates_timeliness => {:error_value_formats => {}}
|
519
|
+
}
|
520
|
+
I18n.backend.store_translations 'zz', translations
|
521
|
+
I18n.locale = :zz
|
522
|
+
end
|
523
|
+
|
524
|
+
it "should be used if defined" do
|
525
|
+
configure_validator(:type => :date, :after => Date.today)
|
526
|
+
validate_with(:birth_date, 1.day.ago)
|
527
|
+
person.errors.on(:birth_date).should match(/retfa/)
|
528
|
+
end
|
529
|
+
|
530
|
+
it "should use I18n translation missing message when not defined" do
|
531
|
+
configure_validator(:type => :date, :on_or_after => Date.today)
|
532
|
+
validate_with(:birth_date, 1.day.ago)
|
533
|
+
person.errors.on(:birth_date).should match(/translation missing/)
|
534
|
+
end
|
535
|
+
|
536
|
+
after(:all) do
|
537
|
+
I18n.locale = :en
|
538
|
+
end
|
539
|
+
|
540
|
+
end
|
541
|
+
|
542
|
+
end
|
543
|
+
|
499
544
|
describe "custom_error_messages" do
|
500
545
|
it "should return hash of custom error messages from configuration with _message truncated from keys" do
|
501
546
|
configure_validator(:type => :date, :invalid_date_message => 'thats no date')
|
@@ -566,6 +611,24 @@ describe ValidatesTimeliness::Validator do
|
|
566
611
|
validate_with(:birth_time, '11:59')
|
567
612
|
person.errors.on(:birth_time).should match(/after \d{2}:\d{2}:\d{2}\Z/)
|
568
613
|
end
|
614
|
+
|
615
|
+
if defined?(I18n)
|
616
|
+
|
617
|
+
describe "I18n" do
|
618
|
+
it "should use global default if locale format missing" do
|
619
|
+
I18n.backend.store_translations 'zz', :activerecord => {:errors => {:messages => { :after => 'after {{restriction}}' }}}
|
620
|
+
I18n.locale = :zz
|
621
|
+
configure_validator(:type => :datetime, :after => 1.day.from_now)
|
622
|
+
validate_with(:birth_date_and_time, Time.now)
|
623
|
+
person.errors.on(:birth_date_and_time).should match(/after \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\Z/)
|
624
|
+
end
|
625
|
+
|
626
|
+
after do
|
627
|
+
I18n.locale = :en
|
628
|
+
end
|
629
|
+
end
|
630
|
+
|
631
|
+
end
|
569
632
|
end
|
570
633
|
|
571
634
|
describe "custom formats" do
|
@@ -644,7 +707,7 @@ describe ValidatesTimeliness::Validator do
|
|
644
707
|
|
645
708
|
def error_messages
|
646
709
|
return @error_messages if defined?(@error_messages)
|
647
|
-
messages = validator.send(:error_messages)
|
710
|
+
messages = defined?(I18n) ? I18n.t('activerecord.errors.messages') : validator.send(:error_messages)
|
648
711
|
@error_messages = messages.inject({}) {|h, (k, v)| h[k] = v.sub(/ (\%s|\{\{\w*\}\}).*/, ''); h }
|
649
712
|
end
|
650
713
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: validates_timeliness
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Adam Meehan
|
@@ -9,7 +9,7 @@ autorequire: validates_timeliness
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date:
|
12
|
+
date: 2010-02-04 00:00:00 +11:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -30,34 +30,34 @@ files:
|
|
30
30
|
- Rakefile
|
31
31
|
- TODO
|
32
32
|
- CHANGELOG
|
33
|
-
- lib/validates_timeliness/version.rb
|
34
33
|
- lib/validates_timeliness/action_view/instance_tag.rb
|
35
|
-
- lib/validates_timeliness/locale/en.yml
|
36
|
-
- lib/validates_timeliness/validation_methods.rb
|
37
|
-
- lib/validates_timeliness/matcher.rb
|
38
34
|
- lib/validates_timeliness/active_record/attribute_methods.rb
|
39
35
|
- lib/validates_timeliness/active_record/multiparameter_attributes.rb
|
40
|
-
- lib/validates_timeliness/parser.rb
|
41
36
|
- lib/validates_timeliness/formats.rb
|
42
|
-
- lib/validates_timeliness/
|
37
|
+
- lib/validates_timeliness/locale/en.yml
|
38
|
+
- lib/validates_timeliness/matcher.rb
|
39
|
+
- lib/validates_timeliness/parser.rb
|
43
40
|
- lib/validates_timeliness/spec/rails/matchers/validate_timeliness.rb
|
41
|
+
- lib/validates_timeliness/validation_methods.rb
|
42
|
+
- lib/validates_timeliness/validator.rb
|
43
|
+
- lib/validates_timeliness/version.rb
|
44
44
|
- lib/validates_timeliness.rb
|
45
|
-
- spec/validator_spec.rb
|
46
45
|
- spec/action_view/instance_tag_spec.rb
|
47
|
-
- spec/ginger_scenarios.rb
|
48
|
-
- spec/spec_helper.rb
|
49
|
-
- spec/formats_spec.rb
|
50
46
|
- spec/active_record/attribute_methods_spec.rb
|
51
47
|
- spec/active_record/multiparameter_attributes_spec.rb
|
52
|
-
- spec/
|
53
|
-
- spec/
|
54
|
-
- spec/time_travel/MIT-LICENSE
|
48
|
+
- spec/formats_spec.rb
|
49
|
+
- spec/ginger_scenarios.rb
|
55
50
|
- spec/parser_spec.rb
|
56
|
-
- spec/
|
51
|
+
- spec/resources/application.rb
|
57
52
|
- spec/resources/person.rb
|
58
|
-
- spec/resources/sqlite_patch.rb
|
59
53
|
- spec/resources/schema.rb
|
60
|
-
- spec/resources/
|
54
|
+
- spec/resources/sqlite_patch.rb
|
55
|
+
- spec/spec/rails/matchers/validate_timeliness_spec.rb
|
56
|
+
- spec/spec_helper.rb
|
57
|
+
- spec/time_travel/MIT-LICENSE
|
58
|
+
- spec/time_travel/time_extensions.rb
|
59
|
+
- spec/time_travel/time_travel.rb
|
60
|
+
- spec/validator_spec.rb
|
61
61
|
has_rdoc: true
|
62
62
|
homepage: http://github.com/adzap/validates_timeliness
|
63
63
|
licenses: []
|
@@ -82,7 +82,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
82
82
|
requirements: []
|
83
83
|
|
84
84
|
rubyforge_project: validatestime
|
85
|
-
rubygems_version: 1.3.
|
85
|
+
rubygems_version: 1.3.5
|
86
86
|
signing_key:
|
87
87
|
specification_version: 3
|
88
88
|
summary: Date and time validation plugin for Rails 2.x which allows custom formats
|