validates_timeliness 3.0.14 → 3.0.15

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: a60055680e49760bf31b2a820e30d35c125701e5
4
+ data.tar.gz: 846e163f120d01337b2e55356cc1a01fca513ea7
5
+ SHA512:
6
+ metadata.gz: 46b5e4bfba055d99c8e6ba8dc3e122bc8e3dc872efb35ee957802f7b3f827b92ec5efd19d64f2054f2597656b91409432a7dcc731b48090cd91603e6323e5fb4
7
+ data.tar.gz: 93ed8ea91b878022a29aee4c5ad0b0586e4c1cff6cc531168c7bfe2aab4e8a232b26c4dfe683bdc99c7d3897dc97b4d91f2c4af0d5e4dffdf90f6362aea3f581
data/CHANGELOG.rdoc CHANGED
@@ -1,3 +1,8 @@
1
+ = 3.0.15 [2015-12-29]
2
+ * Fixes mongoid 3 support and removes mongoid 2 support(johnnyshields)
3
+ * Some documentation/comments tidying
4
+ * Some general tidying up
5
+
1
6
  = 3.0.14 [2012-08-23]
2
7
  * Fix for using validates :timeliness => {} form to correctly add attributes to timeliness validated attributes.
3
8
 
data/README.rdoc CHANGED
@@ -39,7 +39,7 @@ Then run
39
39
 
40
40
  $ rails generate validates_timeliness:install
41
41
 
42
- This creates configuration initializer and locale files. In the initializer, you there are a number of config
42
+ This creates configuration initializer and locale files. In the initializer, there are a number of config
43
43
  options to customize the plugin.
44
44
 
45
45
  NOTE: You may wish to enable the plugin parser and the extensions to start. Please read those sections first.
@@ -55,7 +55,10 @@ NOTE: You may wish to enable the plugin parser and the extensions to start. Plea
55
55
  validates_datetime :finish_time, :after => :start_time # Method symbol
56
56
 
57
57
  validates_date :booked_at, :on => :create, :on_or_after => :today # See Restriction Shorthand.
58
- validates_time :booked_at, :between => ['9.00am', '5:00pm']
58
+
59
+ validates_time :booked_at, :between => ['9:00am', '5:00pm'] # On or after 9:00AM and on or before 5:00PM
60
+ validates_time :booked_at, :between => '9:00am'..'5:00pm' # The same as previous example
61
+ validates_time :booked_at, :between => '9:00am'...'5:00pm' # On or after 9:00AM and strictly before 5:00PM
59
62
 
60
63
  validates_time :breakfast_time, :on_or_after => '6:00am',
61
64
  :on_or_after_message => 'must be after opening time',
@@ -173,8 +176,8 @@ You can also use validation options for custom error messages. The following opt
173
176
  :after_message
174
177
  :on_or_after_message
175
178
 
176
- Note: There is no :between_message option. The between error message should be defined using the
177
- :on_or_before and :on_or_after messages.
179
+ Note: There is no :between_message option. The between error message should be defined using the :on_or_after and :on_or_before
180
+ (:before in case when :between argument is a Range with excluded high value, see Examples) messages.
178
181
 
179
182
  It is highly recommended you use the I18n system for error messages.
180
183
 
data/Rakefile CHANGED
@@ -5,7 +5,7 @@ require 'appraisal'
5
5
 
6
6
  Bundler::GemHelper.install_tasks
7
7
 
8
- require 'rake/rdoctask'
8
+ require 'rdoc/task'
9
9
  require 'rspec/core/rake_task'
10
10
 
11
11
  desc "Run specs"
@@ -32,7 +32,7 @@ ValidatesTimeliness.setup do |config|
32
32
  # Remove one or more formats making them invalid. e.g. remove_formats(:date, 'dd/mm/yyy')
33
33
  # config.parser.remove_formats()
34
34
  #
35
- # Change the amiguous year threshold when parsing a 2 digit year
35
+ # Change the ambiguous year threshold when parsing a 2 digit year
36
36
  # config.parser.ambiguous_year_threshold = 30
37
37
  #
38
38
  # Treat ambiguous dates, such as 01/02/1950, as a Non-US date.
@@ -6,7 +6,7 @@ module ValidatesTimeliness
6
6
  # It is best to use the plugin parser to avoid errors on a bad
7
7
  # field value in Mongoid. Parser will return nil rather than error.
8
8
 
9
- module ClassMethods
9
+ module ClassMethods
10
10
  public
11
11
 
12
12
  # Mongoid has no bulk attribute method definition hook. It defines
@@ -23,7 +23,7 @@ module ValidatesTimeliness
23
23
  Date => :date,
24
24
  Time => :time,
25
25
  DateTime => :datetime
26
- }[fields[attr_name.to_s].type] || :datetime
26
+ }[fields[database_field_name(attr_name)].type] || :datetime
27
27
  end
28
28
 
29
29
  protected
@@ -33,31 +33,17 @@ module ValidatesTimeliness
33
33
 
34
34
  "#{var_name} = Timeliness::Parser.parse(value, :#{type})"
35
35
  end
36
-
37
36
  end
38
37
 
39
- module Reload
40
- def reload(*args)
41
- _clear_timeliness_cache
42
- super
43
- end
38
+ def reload(*args)
39
+ _clear_timeliness_cache
40
+ super
44
41
  end
45
42
  end
46
43
  end
47
44
  end
48
-
45
+
49
46
  module Mongoid::Document
50
47
  include ValidatesTimeliness::AttributeMethods
51
48
  include ValidatesTimeliness::ORM::Mongoid
52
-
53
- # Pre-2.3 reload
54
- if (instance_methods & ['reload', :reload]).present?
55
- def reload_with_timeliness
56
- _clear_timeliness_cache
57
- reload_without_timeliness
58
- end
59
- alias_method_chain :reload, :timeliness
60
- else
61
- include ValidatesTimeliness::ORM::Mongoid::Reload
62
- end
63
49
  end
@@ -1,3 +1,4 @@
1
+ require 'active_model'
1
2
  require 'active_model/validator'
2
3
 
3
4
  module ValidatesTimeliness
@@ -32,7 +33,12 @@ module ValidatesTimeliness
32
33
 
33
34
  if range = options.delete(:between)
34
35
  raise ArgumentError, ":between must be a Range or an Array" unless range.is_a?(Range) || range.is_a?(Array)
35
- options[:on_or_after], options[:on_or_before] = range.first, range.last
36
+ options[:on_or_after] = range.first
37
+ if range.is_a?(Range) && range.exclude_end?
38
+ options[:before] = range.last
39
+ else
40
+ options[:on_or_before] = range.last
41
+ end
36
42
  end
37
43
 
38
44
  @restrictions_to_check = RESTRICTIONS.keys & options.keys
@@ -1,3 +1,3 @@
1
1
  module ValidatesTimeliness
2
- VERSION = '3.0.14'
2
+ VERSION = '3.0.15'
3
3
  end
@@ -24,26 +24,24 @@ module ValidatesTimeliness
24
24
 
25
25
  class << self
26
26
  delegate :default_timezone, :default_timezone=, :dummy_date_for_time_type, :dummy_date_for_time_type=, :to => Timeliness
27
+
28
+ attr_accessor :extend_orms, :ignore_restriction_errors, :restriction_shorthand_symbols, :use_plugin_parser
27
29
  end
28
30
 
29
31
  # Extend ORM/ODMs for full support (:active_record, :mongoid).
30
- mattr_accessor :extend_orms
31
- @@extend_orms = []
32
+ self.extend_orms = []
32
33
 
33
34
  # Ignore errors when restriction options are evaluated
34
- mattr_accessor :ignore_restriction_errors
35
- @@ignore_restriction_errors = false
35
+ self.ignore_restriction_errors = false
36
36
 
37
37
  # Shorthand time and date symbols for restrictions
38
- mattr_accessor :restriction_shorthand_symbols
39
- @@restriction_shorthand_symbols = {
38
+ self.restriction_shorthand_symbols = {
40
39
  :now => lambda { Time.current },
41
40
  :today => lambda { Date.current }
42
41
  }
43
42
 
44
43
  # Use the plugin date/time parser which is stricter and extensible
45
- mattr_accessor :use_plugin_parser
46
- @@use_plugin_parser = false
44
+ self.use_plugin_parser = false
47
45
 
48
46
  # Default timezone
49
47
  self.default_timezone = :utc
@@ -51,10 +49,6 @@ module ValidatesTimeliness
51
49
  # Set the dummy date part for a time type values.
52
50
  self.dummy_date_for_time_type = [ 2000, 1, 1 ]
53
51
 
54
- def self.parser
55
- Timeliness
56
- end
57
-
58
52
  # Setup method for plugin configuration
59
53
  def self.setup
60
54
  yield self
@@ -64,6 +58,8 @@ module ValidatesTimeliness
64
58
  def self.load_orms
65
59
  extend_orms.each {|orm| require "validates_timeliness/orm/#{orm}" }
66
60
  end
61
+
62
+ def self.parser; Timeliness end
67
63
  end
68
64
 
69
65
  require 'validates_timeliness/conversion'
data/spec/spec_helper.rb CHANGED
@@ -57,6 +57,7 @@ class PersonWithShim < Person
57
57
  include TestModelShim
58
58
  end
59
59
 
60
+ ActiveRecord::Base.default_timezone = :utc
60
61
  ActiveRecord::Base.time_zone_aware_attributes = true
61
62
  ActiveRecord::Base.establish_connection({:adapter => 'sqlite3', :database => ':memory:'})
62
63
  ActiveRecord::Migration.verbose = false
@@ -10,7 +10,7 @@ describe ValidatesTimeliness::Extensions::MultiparameterHandler do
10
10
 
11
11
  it 'should assign a Time value for valid datetimes' do
12
12
  employee = record_with_multiparameter_attribute(:birth_datetime, [2000, 2, 28, 12, 0, 0])
13
- employee.birth_datetime_before_type_cast.should eq Time.local(2000, 2, 28, 12, 0, 0)
13
+ employee.birth_datetime_before_type_cast.should eq Time.zone.local(2000, 2, 28, 12, 0, 0)
14
14
  end
15
15
 
16
16
  it 'should assign a string value for incomplete time' do
@@ -1,6 +1,8 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe ValidatesTimeliness, 'HelperMethods' do
4
+ let(:record) { Person.new }
5
+
4
6
  it 'should define class validation methods' do
5
7
  Person.should respond_to(:validates_date)
6
8
  Person.should respond_to(:validates_time)
@@ -8,23 +10,21 @@ describe ValidatesTimeliness, 'HelperMethods' do
8
10
  end
9
11
 
10
12
  it 'should define instance validation methods' do
11
- Person.new.should respond_to(:validates_date)
12
- Person.new.should respond_to(:validates_time)
13
- Person.new.should respond_to(:validates_datetime)
13
+ record.should respond_to(:validates_date)
14
+ record.should respond_to(:validates_time)
15
+ record.should respond_to(:validates_datetime)
14
16
  end
15
17
 
16
18
  it 'should validate instance using class validation defined' do
17
19
  Person.validates_date :birth_date
18
- r = Person.new
19
- r.valid?
20
+ record.valid?
20
21
 
21
- r.errors[:birth_date].should_not be_empty
22
+ record.errors[:birth_date].should_not be_empty
22
23
  end
23
24
 
24
25
  it 'should validate instance using instance valiation method' do
25
- r = Person.new
26
- r.validates_date :birth_date
26
+ record.validates_date :birth_date
27
27
 
28
- r.errors[:birth_date].should_not be_empty
28
+ record.errors[:birth_date].should_not be_empty
29
29
  end
30
30
  end
@@ -3,6 +3,8 @@ require 'spec_helper'
3
3
  describe ValidatesTimeliness, 'ActiveRecord' do
4
4
 
5
5
  context "validation methods" do
6
+ let(:record) { Employee.new }
7
+
6
8
  it 'should be defined for the class' do
7
9
  ActiveRecord::Base.should respond_to(:validates_date)
8
10
  ActiveRecord::Base.should respond_to(:validates_time)
@@ -10,33 +12,30 @@ describe ValidatesTimeliness, 'ActiveRecord' do
10
12
  end
11
13
 
12
14
  it 'should defines for the instance' do
13
- Employee.new.should respond_to(:validates_date)
14
- Employee.new.should respond_to(:validates_time)
15
- Employee.new.should respond_to(:validates_datetime)
15
+ record.should respond_to(:validates_date)
16
+ record.should respond_to(:validates_time)
17
+ record.should respond_to(:validates_datetime)
16
18
  end
17
19
 
18
20
  it "should validate a valid value string" do
19
- r = Employee.new
20
- r.birth_date = '2012-01-01'
21
+ record.birth_date = '2012-01-01'
21
22
 
22
- r.valid?
23
- r.errors[:birth_date].should be_empty
23
+ record.valid?
24
+ record.errors[:birth_date].should be_empty
24
25
  end
25
26
 
26
27
  it "should validate a invalid value string" do
27
- r = Employee.new
28
- r.birth_date = 'not a date'
28
+ record.birth_date = 'not a date'
29
29
 
30
- r.valid?
31
- r.errors[:birth_date].should_not be_empty
30
+ record.valid?
31
+ record.errors[:birth_date].should_not be_empty
32
32
  end
33
33
 
34
34
  it "should validate a nil value" do
35
- r = Employee.new
36
- r.birth_date = nil
35
+ record.birth_date = nil
37
36
 
38
- r.valid?
39
- r.errors[:birth_date].should be_empty
37
+ record.valid?
38
+ record.errors[:birth_date].should be_empty
40
39
  end
41
40
  end
42
41
 
@@ -83,36 +82,36 @@ describe ValidatesTimeliness, 'ActiveRecord' do
83
82
  end
84
83
 
85
84
  context 'value cache' do
85
+ let(:record) { EmployeeWithCache.new }
86
+
86
87
  context 'for datetime column' do
87
88
  it 'should store raw value' do
88
- r = EmployeeWithCache.new
89
- r.birth_datetime = datetime_string = '2010-01-01 12:30'
89
+ record.birth_datetime = datetime_string = '2010-01-01 12:30'
90
90
 
91
- r._timeliness_raw_value_for('birth_datetime').should eq datetime_string
91
+ record._timeliness_raw_value_for('birth_datetime').should eq datetime_string
92
92
  end
93
93
  end
94
94
 
95
95
  context 'for date column' do
96
96
  it 'should store raw value' do
97
- r = EmployeeWithCache.new
98
- r.birth_date = date_string = '2010-01-01'
97
+ record.birth_date = date_string = '2010-01-01'
99
98
 
100
- r._timeliness_raw_value_for('birth_date').should eq date_string
99
+ record._timeliness_raw_value_for('birth_date').should eq date_string
101
100
  end
102
101
  end
103
102
 
104
103
  context 'for time column' do
105
104
  it 'should store raw value' do
106
- r = EmployeeWithCache.new
107
- r.birth_time = time_string = '12:12'
105
+ record.birth_time = time_string = '12:12'
108
106
 
109
- r._timeliness_raw_value_for('birth_time').should eq time_string
107
+ record._timeliness_raw_value_for('birth_time').should eq time_string
110
108
  end
111
109
  end
112
110
  end
113
111
 
114
112
  context "with plugin parser" do
115
113
  with_config(:use_plugin_parser, true)
114
+ let(:record) { EmployeeWithParser.new }
116
115
 
117
116
  class EmployeeWithParser < ActiveRecord::Base
118
117
  self.table_name = 'employees'
@@ -125,22 +124,20 @@ describe ValidatesTimeliness, 'ActiveRecord' do
125
124
  it 'should parse a string value' do
126
125
  Timeliness::Parser.should_receive(:parse)
127
126
 
128
- r = EmployeeWithParser.new
129
- r.birth_date = '2010-01-01'
127
+ record.birth_date = '2010-01-01'
130
128
  end
131
129
 
132
130
  it 'should parse a invalid string value as nil' do
133
131
  Timeliness::Parser.should_receive(:parse)
134
- r = EmployeeWithParser.new
135
- r.birth_date = 'not valid'
132
+
133
+ record.birth_date = 'not valid'
136
134
  end
137
135
 
138
136
  it 'should store a Date value after parsing string' do
139
- r = EmployeeWithParser.new
140
- r.birth_date = '2010-01-01'
137
+ record.birth_date = '2010-01-01'
141
138
 
142
- r.birth_date.should be_kind_of(Date)
143
- r.birth_date.should eq Date.new(2010, 1, 1)
139
+ record.birth_date.should be_kind_of(Date)
140
+ record.birth_date.should eq Date.new(2010, 1, 1)
144
141
  end
145
142
  end
146
143
 
@@ -148,23 +145,20 @@ describe ValidatesTimeliness, 'ActiveRecord' do
148
145
  it 'should parse a string value' do
149
146
  Timeliness::Parser.should_receive(:parse)
150
147
 
151
- r = EmployeeWithParser.new
152
- r.birth_time = '12:30'
148
+ record.birth_time = '12:30'
153
149
  end
154
150
 
155
151
  it 'should parse a invalid string value as nil' do
156
152
  Timeliness::Parser.should_receive(:parse)
157
153
 
158
- r = EmployeeWithParser.new
159
- r.birth_time = 'not valid'
154
+ record.birth_time = 'not valid'
160
155
  end
161
156
 
162
157
  it 'should store a Time value after parsing string' do
163
- r = EmployeeWithParser.new
164
- r.birth_time = '12:30'
158
+ record.birth_time = '12:30'
165
159
 
166
- r.birth_time.should be_kind_of(Time)
167
- r.birth_time.should eq Time.utc(2000, 1, 1, 12, 30)
160
+ record.birth_time.should be_kind_of(Time)
161
+ record.birth_time.should eq Time.utc(2000, 1, 1, 12, 30)
168
162
  end
169
163
  end
170
164
 
@@ -174,29 +168,25 @@ describe ValidatesTimeliness, 'ActiveRecord' do
174
168
  it 'should parse a string value' do
175
169
  Timeliness::Parser.should_receive(:parse)
176
170
 
177
- r = EmployeeWithParser.new
178
- r.birth_datetime = '2010-01-01 12:00'
171
+ record.birth_datetime = '2010-01-01 12:00'
179
172
  end
180
173
 
181
174
  it 'should parse a invalid string value as nil' do
182
175
  Timeliness::Parser.should_receive(:parse)
183
176
 
184
- r = EmployeeWithParser.new
185
- r.birth_datetime = 'not valid'
177
+ record.birth_datetime = 'not valid'
186
178
  end
187
179
 
188
180
  it 'should parse string into Time value' do
189
- r = EmployeeWithParser.new
190
- r.birth_datetime = '2010-01-01 12:00'
181
+ record.birth_datetime = '2010-01-01 12:00'
191
182
 
192
- r.birth_datetime.should be_kind_of(Time)
183
+ record.birth_datetime.should be_kind_of(Time)
193
184
  end
194
185
 
195
186
  it 'should parse string as current timezone' do
196
- r = EmployeeWithParser.new
197
- r.birth_datetime = '2010-06-01 12:00'
187
+ record.birth_datetime = '2010-06-01 12:00'
198
188
 
199
- r.birth_datetime.utc_offset.should eq Time.zone.utc_offset
189
+ record.birth_datetime.utc_offset.should eq Time.zone.utc_offset
200
190
  end
201
191
  end
202
192
  end
@@ -204,43 +194,43 @@ describe ValidatesTimeliness, 'ActiveRecord' do
204
194
 
205
195
  context "reload" do
206
196
  it 'should clear cache value' do
207
- r = Employee.create!
208
- r.birth_date = '2010-01-01'
197
+ record = Employee.create!
198
+ record.birth_date = '2010-01-01'
209
199
 
210
- r.reload
200
+ record.reload
211
201
 
212
- r._timeliness_raw_value_for('birth_date').should be_nil
202
+ record._timeliness_raw_value_for('birth_date').should be_nil
213
203
  end
214
204
  end
215
205
 
216
206
  context "before_type_cast method" do
207
+ let(:record) { Employee.new }
208
+
217
209
  it 'should be defined on class if ORM supports it' do
218
- Employee.new.should respond_to(:birth_datetime_before_type_cast)
210
+ record.should respond_to(:birth_datetime_before_type_cast)
219
211
  end
220
212
 
221
213
  it 'should return original value' do
222
- r = Employee.new
223
- r.birth_datetime = date_string = '2010-01-01'
214
+ record.birth_datetime = date_string = '2010-01-01'
224
215
 
225
- r.birth_datetime_before_type_cast.should eq date_string
216
+ record.birth_datetime_before_type_cast.should eq date_string
226
217
  end
227
218
 
228
219
  it 'should return attribute if no attribute assignment has been made' do
229
220
  datetime = Time.zone.local(2010,01,01)
230
221
  Employee.create(:birth_datetime => datetime)
231
222
 
232
- r = Employee.last
233
- r.birth_datetime_before_type_cast.should match(/2010-01-01 00:00:00/)
223
+ record = Employee.last
224
+ record.birth_datetime_before_type_cast.should match(/#{datetime.utc.to_s[0...-4]}/)
234
225
  end
235
226
 
236
227
  context "with plugin parser" do
237
228
  with_config(:use_plugin_parser, true)
238
229
 
239
230
  it 'should return original value' do
240
- r = Employee.new
241
- r.birth_datetime = date_string = '2010-01-31'
231
+ record.birth_datetime = date_string = '2010-01-31'
242
232
 
243
- r.birth_datetime_before_type_cast.should eq date_string
233
+ record.birth_datetime_before_type_cast.should eq date_string
244
234
  end
245
235
  end
246
236
 
@@ -7,13 +7,13 @@ require 'mongoid'
7
7
  require 'validates_timeliness/orm/mongoid'
8
8
 
9
9
  Mongoid.configure do |config|
10
- name = "validates_timeliness_test"
11
- host = "localhost"
12
- config.master = Mongo::Connection.new.db(name)
13
- config.persist_in_safe_mode = false
10
+ config.connect_to('validates_timeliness_test')
14
11
  end
15
12
 
16
13
  describe ValidatesTimeliness, 'Mongoid' do
14
+ after(:each) do
15
+ Mongoid.purge!
16
+ end
17
17
 
18
18
  class Article
19
19
  include Mongoid::Document
@@ -47,16 +47,6 @@ describe ValidatesTimeliness, 'Mongoid' do
47
47
  record.errors[:publish_date].should be_empty
48
48
  end
49
49
 
50
- it "should validate a invalid value string" do
51
- begin
52
- record.publish_date = 'not a date'
53
- rescue
54
- end
55
-
56
- record.valid?
57
- record.errors[:publish_date].should_not be_empty
58
- end
59
-
60
50
  it "should validate a nil value" do
61
51
  record.publish_date = nil
62
52
 
@@ -67,6 +57,8 @@ describe ValidatesTimeliness, 'Mongoid' do
67
57
 
68
58
  it 'should determine type for attribute' do
69
59
  Article.timeliness_attribute_type(:publish_date).should == :date
60
+ Article.timeliness_attribute_type(:publish_time).should == :time
61
+ Article.timeliness_attribute_type(:publish_datetime).should == :datetime
70
62
  end
71
63
 
72
64
  context "attribute write method" do
@@ -157,7 +149,7 @@ describe ValidatesTimeliness, 'Mongoid' do
157
149
  record.publish_datetime.should be_kind_of(DateTime)
158
150
  end
159
151
 
160
- pending 'should parse string as current timezone' do
152
+ it 'should parse string as current timezone' do
161
153
  record.publish_datetime = '2010-06-01 12:00'
162
154
 
163
155
  record.publish_datetime.utc_offset.should eq Time.zone.utc_offset
@@ -176,8 +168,50 @@ describe ValidatesTimeliness, 'Mongoid' do
176
168
  end
177
169
 
178
170
  context "before_type_cast method" do
179
- it 'should not be defined if ORM does not support it' do
180
- Article.new.should_not respond_to(:publish_datetime_before_type_cast)
171
+ let(:record){ Article.new }
172
+
173
+ it 'should be defined on class if ORM supports it' do
174
+ record.should respond_to(:publish_datetime_before_type_cast)
175
+ end
176
+
177
+ it 'should return original value' do
178
+ record.publish_datetime = date_string = '2010-01-01'
179
+
180
+ record.publish_datetime_before_type_cast.should eq date_string
181
+ end
182
+
183
+ it 'should return attribute if no attribute assignment has been made' do
184
+ time = Time.zone.local(2010,01,01)
185
+ Article.create(:publish_datetime => time)
186
+ record = Article.last
187
+ record.publish_datetime_before_type_cast.should eq time.to_datetime
188
+ end
189
+
190
+ context "with plugin parser" do
191
+ with_config(:use_plugin_parser, true)
192
+
193
+ it 'should return original value' do
194
+ record.publish_datetime = date_string = '2010-01-31'
195
+ record.publish_datetime_before_type_cast.should eq date_string
196
+ end
197
+ end
198
+ end
199
+
200
+ context "with aliased fields" do
201
+ class ArticleWithAliasedFields
202
+ include Mongoid::Document
203
+ field :pd, as: :publish_date, :type => Date
204
+ field :pt, as: :publish_time, :type => Time
205
+ field :pdt, as: :publish_datetime, :type => DateTime
206
+ validates_date :publish_date, :allow_nil => true
207
+ validates_time :publish_time, :allow_nil => true
208
+ validates_datetime :publish_datetime, :allow_nil => true
209
+ end
210
+
211
+ it 'should determine type for attribute' do
212
+ ArticleWithAliasedFields.timeliness_attribute_type(:publish_date).should == :date
213
+ ArticleWithAliasedFields.timeliness_attribute_type(:publish_time).should == :time
214
+ ArticleWithAliasedFields.timeliness_attribute_type(:publish_datetime).should == :datetime
181
215
  end
182
216
  end
183
217
  end
@@ -1,8 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe ValidatesTimeliness::Validator do
4
- NIL = [nil]
5
-
6
4
  before do
7
5
  Timecop.freeze(Time.local_time(2010, 1, 1, 0, 0, 0))
8
6
  end
@@ -46,13 +44,13 @@ describe ValidatesTimeliness::Validator do
46
44
  describe ":allow_nil option" do
47
45
  it 'should not allow nil by default' do
48
46
  Person.validates_date :birth_date
49
- invalid!(:birth_date, NIL, 'is not a valid date')
47
+ invalid!(:birth_date, [nil], 'is not a valid date')
50
48
  valid!(:birth_date, Date.today)
51
49
  end
52
50
 
53
51
  it 'should allow nil when true' do
54
52
  Person.validates_date :birth_date, :allow_nil => true
55
- valid!(:birth_date, NIL)
53
+ valid!(:birth_date, [nil])
56
54
  end
57
55
 
58
56
  context "with raw value cache" do
@@ -117,6 +115,19 @@ describe ValidatesTimeliness::Validator do
117
115
  valid!(:birth_date, on_or_before)
118
116
  end
119
117
  end
118
+
119
+ describe "range with excluded end value" do
120
+ it 'should be split option into :on_or_after and :before values' do
121
+ on_or_after, before = Date.new(2010,1,1), Date.new(2010,1,3)
122
+ Person.validates_date :birth_date, :between => on_or_after...before
123
+ Person.validators.first.options[:on_or_after].should == on_or_after
124
+ Person.validators.first.options[:before].should == before
125
+ invalid!(:birth_date, on_or_after - 1, "must be on or after 2010-01-01")
126
+ invalid!(:birth_date, before, "must be before 2010-01-03")
127
+ valid!(:birth_date, on_or_after)
128
+ valid!(:birth_date, before - 1)
129
+ end
130
+ end
120
131
  end
121
132
 
122
133
  describe ":ignore_usec option" do
@@ -226,7 +237,7 @@ describe ValidatesTimeliness::Validator do
226
237
  Person.validates_date :birth_date, :invalid_date_message => 'custom invalid message'
227
238
  invalid!(:birth_date, 'asdf', 'custom invalid message')
228
239
  end
229
-
240
+
230
241
  it 'should be used for invalid restriction' do
231
242
  Person.validates_date :birth_date, :before => Time.now, :before_message => 'custom before message'
232
243
  invalid!(:birth_date, Time.now, 'custom before message')
@@ -16,5 +16,5 @@ Gem::Specification.new do |s|
16
16
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
17
17
  s.extra_rdoc_files = ["README.rdoc", "CHANGELOG.rdoc", "LICENSE"]
18
18
 
19
- s.add_runtime_dependency(%q<timeliness>, ["~> 0.3.6"])
19
+ s.add_runtime_dependency(%q<timeliness>, ["~> 0.3.7"])
20
20
  end
metadata CHANGED
@@ -1,50 +1,39 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: validates_timeliness
3
- version: !ruby/object:Gem::Version
4
- hash: 27
5
- prerelease:
6
- segments:
7
- - 3
8
- - 0
9
- - 14
10
- version: 3.0.14
3
+ version: !ruby/object:Gem::Version
4
+ version: 3.0.15
11
5
  platform: ruby
12
- authors:
6
+ authors:
13
7
  - Adam Meehan
14
8
  autorequire:
15
9
  bindir: bin
16
10
  cert_chain: []
17
-
18
- date: 2012-08-23 00:00:00 +10:00
19
- default_executable:
20
- dependencies:
21
- - !ruby/object:Gem::Dependency
22
- requirement: &id001 !ruby/object:Gem::Requirement
23
- none: false
24
- requirements:
25
- - - ~>
26
- - !ruby/object:Gem::Version
27
- hash: 31
28
- segments:
29
- - 0
30
- - 3
31
- - 6
32
- version: 0.3.6
11
+ date: 2015-12-29 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
33
14
  name: timeliness
34
- prerelease: false
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 0.3.7
35
20
  type: :runtime
36
- version_requirements: *id001
37
- description: Adds validation methods to ActiveModel for validating dates and times. Works with multiple ORMS.
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 0.3.7
27
+ description: Adds validation methods to ActiveModel for validating dates and times.
28
+ Works with multiple ORMS.
38
29
  email: adam.meehan@gmail.com
39
30
  executables: []
40
-
41
31
  extensions: []
42
-
43
- extra_rdoc_files:
32
+ extra_rdoc_files:
44
33
  - README.rdoc
45
34
  - CHANGELOG.rdoc
46
35
  - LICENSE
47
- files:
36
+ files:
48
37
  - CHANGELOG.rdoc
49
38
  - LICENSE
50
39
  - README.rdoc
@@ -91,41 +80,30 @@ files:
91
80
  - spec/validates_timeliness/validator_spec.rb
92
81
  - spec/validates_timeliness_spec.rb
93
82
  - validates_timeliness.gemspec
94
- has_rdoc: true
95
83
  homepage: http://github.com/adzap/validates_timeliness
96
84
  licenses: []
97
-
85
+ metadata: {}
98
86
  post_install_message:
99
87
  rdoc_options: []
100
-
101
- require_paths:
88
+ require_paths:
102
89
  - lib
103
- required_ruby_version: !ruby/object:Gem::Requirement
104
- none: false
105
- requirements:
90
+ required_ruby_version: !ruby/object:Gem::Requirement
91
+ requirements:
106
92
  - - ">="
107
- - !ruby/object:Gem::Version
108
- hash: 3
109
- segments:
110
- - 0
111
- version: "0"
112
- required_rubygems_version: !ruby/object:Gem::Requirement
113
- none: false
114
- requirements:
93
+ - !ruby/object:Gem::Version
94
+ version: '0'
95
+ required_rubygems_version: !ruby/object:Gem::Requirement
96
+ requirements:
115
97
  - - ">="
116
- - !ruby/object:Gem::Version
117
- hash: 3
118
- segments:
119
- - 0
120
- version: "0"
98
+ - !ruby/object:Gem::Version
99
+ version: '0'
121
100
  requirements: []
122
-
123
101
  rubyforge_project:
124
- rubygems_version: 1.5.2
102
+ rubygems_version: 2.4.5
125
103
  signing_key:
126
- specification_version: 3
104
+ specification_version: 4
127
105
  summary: Date and time validation plugin for Rails which allows custom formats
128
- test_files:
106
+ test_files:
129
107
  - spec/spec_helper.rb
130
108
  - spec/support/config_helper.rb
131
109
  - spec/support/model_helpers.rb