validates_timeliness 2.3.1 → 2.3.2

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -1,3 +1,8 @@
1
+ = 2.3.2 [2010-11-07]
2
+ - Fixed parser for string with timezone offset (thanks sigi)
3
+ - Support for latest I18n interpolation tokens in locale file
4
+ - Fixed parser allowing an hour over 12 for AM meridian
5
+
1
6
  = 2.3.1 [2010-03-19]
2
7
  - Fixed bug where custom attribute writer method for date/times were being overriden
3
8
 
data/README.rdoc CHANGED
@@ -31,18 +31,17 @@ time string.
31
31
 
32
32
  == INSTALLATION:
33
33
 
34
- As plugin (from master)
35
-
36
- ./script/plugin install git://github.com/adzap/validates_timeliness.git
37
-
38
34
  As gem
39
35
 
40
- sudo gem install validates_timeliness
36
+ gem install validates_timeliness -v '~> 2.3'
41
37
 
42
38
  # in environment.rb
43
39
 
44
- config.gem 'validates_timeliness'
40
+ config.gem 'validates_timeliness', :version => '~> 2.3'
41
+
42
+ As plugin (from master)
45
43
 
44
+ ./script/plugin install git://github.com/adzap/validates_timeliness.git -r v2.3
46
45
 
47
46
  == USAGE:
48
47
 
@@ -209,6 +209,8 @@ module ValidatesTimeliness
209
209
  values[0..2] = dummy_date_for_time_type if type == :time
210
210
  return values
211
211
  end
212
+ rescue
213
+ nil
212
214
  end
213
215
 
214
216
  # Delete formats of specified type. Error raised if format not found.
@@ -255,6 +257,7 @@ module ValidatesTimeliness
255
257
  hour = hour.to_i
256
258
  return hour if meridian.nil?
257
259
  if meridian.delete('.').downcase == 'am'
260
+ raise if hour == 0 || hour > 12
258
261
  hour == 12 ? 0 : hour
259
262
  else
260
263
  hour == 12 ? hour : hour + 12
@@ -0,0 +1,18 @@
1
+ en:
2
+ activerecord:
3
+ errors:
4
+ messages:
5
+ invalid_date: "is not a valid date"
6
+ invalid_time: "is not a valid time"
7
+ invalid_datetime: "is not a valid datetime"
8
+ is_at: "must be at %{restriction}"
9
+ before: "must be before %{restriction}"
10
+ on_or_before: "must be on or before %{restriction}"
11
+ after: "must be after %{restriction}"
12
+ on_or_after: "must be on or after %{restriction}"
13
+ between: "must be between %{earliest} and %{latest}"
14
+ validates_timeliness:
15
+ error_value_formats:
16
+ date: '%Y-%m-%d'
17
+ time: '%H:%M:%S'
18
+ datetime: '%Y-%m-%d %H:%M:%S'
@@ -13,7 +13,7 @@ module ValidatesTimeliness
13
13
  if type == :date
14
14
  Date.new(*time_array[0..2]) rescue nil
15
15
  else
16
- make_time(time_array[0..7])
16
+ make_time(time_array[0..6])
17
17
  end
18
18
  end
19
19
 
@@ -1,3 +1,3 @@
1
1
  module ValidatesTimeliness
2
- VERSION = "2.3.1"
2
+ VERSION = "2.3.2"
3
3
  end
@@ -2,10 +2,18 @@ require 'validates_timeliness/formats'
2
2
  require 'validates_timeliness/parser'
3
3
  require 'validates_timeliness/validator'
4
4
  require 'validates_timeliness/validation_methods'
5
-
6
5
  require 'validates_timeliness/active_record/attribute_methods'
7
6
  require 'validates_timeliness/active_record/multiparameter_attributes'
8
7
  require 'validates_timeliness/action_view/instance_tag'
8
+ begin
9
+ i18n_path = $:.grep(/active_support\/vendor\/i18n-/)
10
+ if i18n_path.empty?
11
+ require 'i18n/version'
12
+ else
13
+ require i18n_path[0] + '/version'
14
+ end
15
+ rescue LoadError
16
+ end if defined?(I18n)
9
17
 
10
18
  module ValidatesTimeliness
11
19
 
@@ -15,7 +23,9 @@ module ValidatesTimeliness
15
23
  mattr_accessor :use_time_zones
16
24
  self.use_time_zones = false
17
25
 
18
- LOCALE_PATH = File.expand_path(File.dirname(__FILE__) + '/validates_timeliness/locale/en.yml')
26
+ I18N_LATEST = defined?(I18n::VERSION) && I18n::VERSION >= '0.4.0'
27
+ locale_file = I18N_LATEST ? 'en.new.yml' : 'en.old.yml'
28
+ LOCALE_PATH = File.expand_path(File.join(File.dirname(__FILE__),'validates_timeliness','locale',locale_file))
19
29
 
20
30
  class << self
21
31
 
data/spec/formats_spec.rb CHANGED
@@ -102,6 +102,13 @@ describe ValidatesTimeliness::Formats do
102
102
  time_array.should == [2000,1,1,12,13,14,0]
103
103
  end
104
104
 
105
+ it "should return nil if time hour is out of range for AM meridian" do
106
+ time_array = formats.parse('13:14 am', :time, :strict => true)
107
+ time_array.should == nil
108
+ time_array = formats.parse('00:14 am', :time, :strict => true)
109
+ time_array.should == nil
110
+ end
111
+
105
112
  it "should return date array from time string" do
106
113
  time_array = formats.parse('2000-02-01', :date, :strict => true)
107
114
  time_array.should == [2000,2,1,0,0,0,0]
@@ -9,7 +9,7 @@
9
9
  # ginger spec
10
10
  #
11
11
  Ginger.configure do |config|
12
- rails_versions = ['2.0.2', '2.1.2', '2.2.2', '2.3.3', '2.3.4', '2.3.5']
12
+ rails_versions = ['2.0.2', '2.1.2', '2.2.2', '2.3.3', '2.3.4', '2.3.5', '2.3.6', '2.3.9']
13
13
 
14
14
  rails_versions.each do |v|
15
15
  g = Ginger::Scenario.new("Rails #{v}")
data/spec/parser_spec.rb CHANGED
@@ -7,6 +7,10 @@ describe ValidatesTimeliness::Parser do
7
7
  it "should return time object for valid time string" do
8
8
  parse("2000-01-01 12:13:14", :datetime).should be_kind_of(Time)
9
9
  end
10
+
11
+ it "should return Time object for ISO 8601 string with time zone" do
12
+ parse("2000-01-01T12:23:42+09:00", :datetime).should be_kind_of(Time)
13
+ end
10
14
 
11
15
  it "should return nil for time string with invalid date part" do
12
16
  parse("2000-02-30 12:13:14", :datetime).should be_nil
@@ -19,12 +23,12 @@ describe ValidatesTimeliness::Parser do
19
23
  it "should return Time object when passed a Time object" do
20
24
  parse(Time.now, :datetime).should be_kind_of(Time)
21
25
  end
22
-
26
+
23
27
  if RAILS_VER >= '2.1'
24
28
  it "should convert time string into current timezone" do
25
29
  Time.zone = 'Melbourne'
26
- time = parse("2000-01-01 12:13:14", :datetime)
27
- Time.zone.utc_offset.should == 10.hours
30
+ time = parse("2000-06-01 12:13:14", :datetime)
31
+ time.utc_offset.should == 10.hours
28
32
  end
29
33
  end
30
34
 
@@ -3,6 +3,14 @@ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
3
3
  describe ValidatesTimeliness::Validator do
4
4
  attr_accessor :person, :validator
5
5
 
6
+ if ValidatesTimeliness::I18N_LATEST
7
+ I18N_REGEXP = /\%\{\w*\}/
8
+ I18N_INTERPOLATION = '%{%s}'
9
+ else
10
+ I18N_REGEXP = /\{\{\w*\}\}/
11
+ I18N_INTERPOLATION = '{{%s}}'
12
+ end
13
+
6
14
  before :all do
7
15
  # freezes time using time_travel plugin
8
16
  Time.now = Time.utc(2000, 1, 1, 0, 0, 0)
@@ -513,8 +521,9 @@ describe ValidatesTimeliness::Validator do
513
521
 
514
522
  describe "localized error messages" do
515
523
  before(:all) do
524
+ message = "retfa #{I18N_INTERPOLATION}" % 'restriction'
516
525
  translations = {
517
- :activerecord => {:errors => {:messages => { :after => 'retfa {{restriction}}' }}},
526
+ :activerecord => {:errors => {:messages => { :after => message }}},
518
527
  :validates_timeliness => {:error_value_formats => {}}
519
528
  }
520
529
  I18n.backend.store_translations 'zz', translations
@@ -616,7 +625,8 @@ describe ValidatesTimeliness::Validator do
616
625
 
617
626
  describe "I18n" do
618
627
  it "should use global default if locale format missing" do
619
- I18n.backend.store_translations 'zz', :activerecord => {:errors => {:messages => { :after => 'after {{restriction}}' }}}
628
+ message = "after #{I18N_INTERPOLATION}" % 'restriction'
629
+ I18n.backend.store_translations 'zz', :activerecord => {:errors => {:messages => { :after => message }}}
620
630
  I18n.locale = :zz
621
631
  configure_validator(:type => :datetime, :after => 1.day.from_now)
622
632
  validate_with(:birth_date_and_time, Time.now)
@@ -708,6 +718,6 @@ describe ValidatesTimeliness::Validator do
708
718
  def error_messages
709
719
  return @error_messages if defined?(@error_messages)
710
720
  messages = defined?(I18n) ? I18n.t('activerecord.errors.messages') : validator.send(:error_messages)
711
- @error_messages = messages.inject({}) {|h, (k, v)| h[k] = v.sub(/ (\%s|\{\{\w*\}\}).*/, ''); h }
721
+ @error_messages = messages.inject({}) {|h, (k, v)| h[k] = v.sub(/ (\%s|#{I18N_REGEXP}).*/, ''); h }
712
722
  end
713
723
  end
metadata CHANGED
@@ -1,7 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: validates_timeliness
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.3.1
4
+ hash: 7
5
+ prerelease: false
6
+ segments:
7
+ - 2
8
+ - 3
9
+ - 2
10
+ version: 2.3.2
5
11
  platform: ruby
6
12
  authors:
7
13
  - Adam Meehan
@@ -9,7 +15,7 @@ autorequire: validates_timeliness
9
15
  bindir: bin
10
16
  cert_chain: []
11
17
 
12
- date: 2010-03-19 00:00:00 +11:00
18
+ date: 2010-11-07 00:00:00 +11:00
13
19
  default_executable:
14
20
  dependencies: []
15
21
 
@@ -34,7 +40,8 @@ files:
34
40
  - lib/validates_timeliness/active_record/attribute_methods.rb
35
41
  - lib/validates_timeliness/active_record/multiparameter_attributes.rb
36
42
  - lib/validates_timeliness/formats.rb
37
- - lib/validates_timeliness/locale/en.yml
43
+ - lib/validates_timeliness/locale/en.new.yml
44
+ - lib/validates_timeliness/locale/en.old.yml
38
45
  - lib/validates_timeliness/matcher.rb
39
46
  - lib/validates_timeliness/parser.rb
40
47
  - lib/validates_timeliness/spec/rails/matchers/validate_timeliness.rb
@@ -68,21 +75,27 @@ rdoc_options: []
68
75
  require_paths:
69
76
  - lib
70
77
  required_ruby_version: !ruby/object:Gem::Requirement
78
+ none: false
71
79
  requirements:
72
80
  - - ">="
73
81
  - !ruby/object:Gem::Version
82
+ hash: 3
83
+ segments:
84
+ - 0
74
85
  version: "0"
75
- version:
76
86
  required_rubygems_version: !ruby/object:Gem::Requirement
87
+ none: false
77
88
  requirements:
78
89
  - - ">="
79
90
  - !ruby/object:Gem::Version
91
+ hash: 3
92
+ segments:
93
+ - 0
80
94
  version: "0"
81
- version:
82
95
  requirements: []
83
96
 
84
97
  rubyforge_project: validatestime
85
- rubygems_version: 1.3.5
98
+ rubygems_version: 1.3.7
86
99
  signing_key:
87
100
  specification_version: 3
88
101
  summary: Date and time validation plugin for Rails 2.x which allows custom formats