validates_timeliness 2.3.1 → 2.3.2

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 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