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
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe ValidatesTimeliness::AttributeMethods do
|
4
|
+
it 'should define _timeliness_raw_value_for instance method' do
|
5
|
+
Person.instance_methods.should include('_timeliness_raw_value_for')
|
6
|
+
end
|
7
|
+
|
8
|
+
context "attribute write method" do
|
9
|
+
class EmployeeCopy < ActiveRecord::Base
|
10
|
+
set_table_name 'employees'
|
11
|
+
validates_datetime :birth_datetime
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'should cache attribute raw value' do
|
15
|
+
r = EmployeeCopy.new
|
16
|
+
r.birth_datetime = date_string = '2010-01-01'
|
17
|
+
r._timeliness_raw_value_for(:birth_datetime).should == date_string
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
context "before_type_cast method" do
|
22
|
+
it 'should be defined on class if ORM supports it' do
|
23
|
+
Employee.instance_methods(false).should include("birth_datetime_before_type_cast")
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'should not be defined if ORM does not support it' do
|
27
|
+
Person.instance_methods(false).should_not include("birth_datetime_before_type_cast")
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'should return original value' do
|
31
|
+
r = Employee.new
|
32
|
+
r.birth_datetime = date_string = '2010-01-01'
|
33
|
+
r.birth_datetime_before_type_cast.should == date_string
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,204 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe ValidatesTimeliness::Conversion do
|
4
|
+
include ValidatesTimeliness::Conversion
|
5
|
+
|
6
|
+
before do
|
7
|
+
Timecop.freeze(Time.mktime(2010, 1, 1, 0, 0, 0))
|
8
|
+
end
|
9
|
+
|
10
|
+
describe "#type_cast_value" do
|
11
|
+
let(:options) { Hash.new }
|
12
|
+
|
13
|
+
describe "for date type" do
|
14
|
+
it "should return same value for date value" do
|
15
|
+
type_cast_value(Date.new(2010, 1, 1), :date).should == Date.new(2010, 1, 1)
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should return date part of time value" do
|
19
|
+
type_cast_value(Time.mktime(2010, 1, 1, 0, 0, 0), :date).should == Date.new(2010, 1, 1)
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should return date part of datetime value" do
|
23
|
+
type_cast_value(DateTime.new(2010, 1, 1, 0, 0, 0), :date).should == Date.new(2010, 1, 1)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
describe "for time type" do
|
28
|
+
it "should return same value for time value matching dummy date part" do
|
29
|
+
type_cast_value(Time.utc(2000, 1, 1, 0, 0, 0), :time).should == Time.utc(2000, 1, 1, 0, 0, 0)
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should return dummy time value with same time part for time value with different date" do
|
33
|
+
type_cast_value(Time.utc(2010, 1, 1, 0, 0, 0), :time).should == Time.utc(2000, 1, 1, 0, 0, 0)
|
34
|
+
end
|
35
|
+
|
36
|
+
it "should return dummy time only for date value" do
|
37
|
+
type_cast_value(Date.new(2010, 1, 1), :time).should == Time.utc(2000, 1, 1, 0, 0, 0)
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should return dummy date with time part for datetime value" do
|
41
|
+
type_cast_value(DateTime.civil_from_format(:utc, 2010, 1, 1, 12, 34, 56), :time).should == Time.utc(2000, 1, 1, 12, 34, 56)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
describe "for datetime type" do
|
46
|
+
it "should return Date as Time value" do
|
47
|
+
type_cast_value(Date.new(2010, 1, 1), :datetime).should == Time.local_time(2010, 1, 1, 0, 0, 0)
|
48
|
+
end
|
49
|
+
|
50
|
+
it "should return same Time value" do
|
51
|
+
value = Time.utc(2010, 1, 1, 12, 34, 56)
|
52
|
+
type_cast_value(Time.utc(2010, 1, 1, 12, 34, 56), :datetime).should == value
|
53
|
+
end
|
54
|
+
|
55
|
+
it "should return as Time with same component values" do
|
56
|
+
type_cast_value(DateTime.civil_from_format(:utc, 2010, 1, 1, 12, 34, 56), :datetime).should == Time.utc(2010, 1, 1, 12, 34, 56)
|
57
|
+
end
|
58
|
+
|
59
|
+
it "should return same Time in correct zone if timezone aware" do
|
60
|
+
@timezone_aware = true
|
61
|
+
value = Time.utc(2010, 1, 1, 12, 34, 56)
|
62
|
+
result = type_cast_value(value, :datetime)
|
63
|
+
result.should == Time.zone.local(2010, 1, 1, 23, 34, 56)
|
64
|
+
result.zone.should == 'EST'
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
describe "ignore_usec option" do
|
69
|
+
let(:options) { {:ignore_usec => true} }
|
70
|
+
|
71
|
+
it "should ignore usec on time values when evaluated" do
|
72
|
+
value = Time.utc(2010, 1, 1, 12, 34, 56, 10000)
|
73
|
+
type_cast_value(value, :datetime).should == Time.utc(2010, 1, 1, 12, 34, 56)
|
74
|
+
end
|
75
|
+
|
76
|
+
it "should ignore usec and return time in correct zone if timezone aware" do
|
77
|
+
@timezone_aware = true
|
78
|
+
value = Time.utc(2010, 1, 1, 12, 34, 56, 10000)
|
79
|
+
result = type_cast_value(value, :datetime)
|
80
|
+
result.should == Time.zone.local(2010, 1, 1, 23, 34, 56)
|
81
|
+
result.zone.should == 'EST'
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
describe "#dummy_time" do
|
87
|
+
it 'should return Time with dummy date values but same time components' do
|
88
|
+
dummy_time(Time.utc(2010, 11, 22, 12, 34, 56)).should == Time.utc(2000, 1, 1, 12, 34, 56)
|
89
|
+
end
|
90
|
+
|
91
|
+
it 'should return same value for Time which already has dummy date values' do
|
92
|
+
dummy_time(Time.utc(2000, 1, 1, 12, 34, 56)).should == Time.utc(2000, 1, 1, 12, 34, 56)
|
93
|
+
end
|
94
|
+
|
95
|
+
it 'should return time component values shifted to current zone if timezone aware' do
|
96
|
+
@timezone_aware = true
|
97
|
+
dummy_time(Time.utc(2000, 1, 1, 12, 34, 56)).should == Time.zone.local(2000, 1, 1, 23, 34, 56)
|
98
|
+
end
|
99
|
+
|
100
|
+
it 'should return base dummy time value for Date value' do
|
101
|
+
dummy_time(Date.new(2010, 11, 22)).should == Time.utc(2000, 1, 1, 0, 0, 0)
|
102
|
+
end
|
103
|
+
|
104
|
+
describe "with custom dummy date" do
|
105
|
+
before(:all) do
|
106
|
+
@@original_dummy_date = ValidatesTimeliness.dummy_date_for_time_type
|
107
|
+
ValidatesTimeliness.dummy_date_for_time_type = [2010, 1, 1]
|
108
|
+
end
|
109
|
+
|
110
|
+
it 'should return dummy time with custom dummy date' do
|
111
|
+
dummy_time(Time.utc(1999, 11, 22, 12, 34, 56)).should == Time.utc(2010, 1, 1, 12, 34, 56)
|
112
|
+
end
|
113
|
+
|
114
|
+
after(:all) do
|
115
|
+
ValidatesTimeliness.dummy_date_for_time_type = @@original_dummy_date
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
describe "#evaluate_option_value" do
|
121
|
+
let(:person) { Person.new }
|
122
|
+
|
123
|
+
it 'should return Date object as is' do
|
124
|
+
value = Date.new(2010,1,1)
|
125
|
+
evaluate_option_value(value, person).should == value
|
126
|
+
end
|
127
|
+
|
128
|
+
it 'should return Time object as is' do
|
129
|
+
value = Time.mktime(2010,1,1)
|
130
|
+
evaluate_option_value(value, person).should == value
|
131
|
+
end
|
132
|
+
|
133
|
+
it 'should return DateTime object as is' do
|
134
|
+
value = DateTime.new(2010,1,1,0,0,0)
|
135
|
+
evaluate_option_value(value, person).should == value
|
136
|
+
end
|
137
|
+
|
138
|
+
it 'should return Time value returned from proc with 0 arity' do
|
139
|
+
value = Time.mktime(2010,1,1)
|
140
|
+
evaluate_option_value(lambda { value }, person).should == value
|
141
|
+
end
|
142
|
+
|
143
|
+
it 'should return Time value returned by record attribute call in proc arity of 1' do
|
144
|
+
value = Time.mktime(2010,1,1)
|
145
|
+
person.birth_time = value
|
146
|
+
evaluate_option_value(lambda {|r| r.birth_time }, person).should == value
|
147
|
+
end
|
148
|
+
|
149
|
+
it 'should return Time value for attribute method symbol which returns Time' do
|
150
|
+
value = Time.mktime(2010,1,1)
|
151
|
+
person.birth_time = value
|
152
|
+
evaluate_option_value(:birth_time, person).should == value
|
153
|
+
end
|
154
|
+
|
155
|
+
it 'should return Time value is default zone from string time value' do
|
156
|
+
value = '2010-01-01 12:00:00'
|
157
|
+
evaluate_option_value(value, person).should == Time.utc(2010,1,1,12,0,0)
|
158
|
+
end
|
159
|
+
|
160
|
+
it 'should return Time value is current zone from string time value if timezone aware' do
|
161
|
+
@timezone_aware = true
|
162
|
+
value = '2010-01-01 12:00:00'
|
163
|
+
evaluate_option_value(value, person).should == Time.zone.local(2010,1,1,12,0,0)
|
164
|
+
end
|
165
|
+
|
166
|
+
it 'should return Time value in default zone from proc which returns string time' do
|
167
|
+
value = '2010-01-01 12:00:00'
|
168
|
+
evaluate_option_value(lambda { value }, person).should == Time.utc(2010,1,1,12,0,0)
|
169
|
+
end
|
170
|
+
|
171
|
+
it 'should return Time value in default zone for attribute method symbol which returns string time value' do
|
172
|
+
value = '2010-01-01 12:00:00'
|
173
|
+
person.birth_time = value
|
174
|
+
evaluate_option_value(:birth_time, person).should == Time.utc(2010,1,1,12,0,0)
|
175
|
+
end
|
176
|
+
|
177
|
+
it 'should return Time value in current zone attribute method symbol which returns string time value if timezone aware' do
|
178
|
+
@timezone_aware = true
|
179
|
+
value = '2010-01-01 12:00:00'
|
180
|
+
person.birth_time = value
|
181
|
+
evaluate_option_value(:birth_time, person).should == Time.zone.local(2010,1,1,12,0,0)
|
182
|
+
end
|
183
|
+
|
184
|
+
context "restriction shorthand" do
|
185
|
+
before do
|
186
|
+
Timecop.freeze(Time.mktime(2010, 1, 1, 0, 0, 0))
|
187
|
+
end
|
188
|
+
|
189
|
+
it 'should evaluate :now as current time' do
|
190
|
+
evaluate_option_value(:now, person).should == Time.now
|
191
|
+
end
|
192
|
+
|
193
|
+
it 'should evaluate :today as current time' do
|
194
|
+
evaluate_option_value(:today, person).should == Date.today
|
195
|
+
end
|
196
|
+
|
197
|
+
it 'should not use shorthand if symbol if is record method' do
|
198
|
+
time = 1.day.from_now
|
199
|
+
person.stub!(:now).and_return(time)
|
200
|
+
evaluate_option_value(:now, person).should == time
|
201
|
+
end
|
202
|
+
end
|
203
|
+
end
|
204
|
+
end
|
@@ -0,0 +1,178 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe ValidatesTimeliness::Extensions::DateTimeSelect do
|
4
|
+
include ActionView::Helpers::DateHelper
|
5
|
+
|
6
|
+
attr_reader :employee, :params
|
7
|
+
|
8
|
+
before do
|
9
|
+
@employee = Employee.new
|
10
|
+
@params = {}
|
11
|
+
end
|
12
|
+
|
13
|
+
describe "datetime_select" do
|
14
|
+
it "should use param values when attribute is nil" do
|
15
|
+
params["employee"] = {
|
16
|
+
"birth_datetime(1i)" => 2009,
|
17
|
+
"birth_datetime(2i)" => 2,
|
18
|
+
"birth_datetime(3i)" => 29,
|
19
|
+
"birth_datetime(4i)" => 12,
|
20
|
+
"birth_datetime(5i)" => 13,
|
21
|
+
"birth_datetime(6i)" => 14,
|
22
|
+
}
|
23
|
+
employee.birth_datetime = nil
|
24
|
+
output = datetime_select(:employee, :birth_datetime, :include_blank => true, :include_seconds => true)
|
25
|
+
output.should have_tag('select[id=employee_birth_datetime_1i] option[selected=selected]', '2009')
|
26
|
+
output.should have_tag('select[id=employee_birth_datetime_2i] option[selected=selected]', 'February')
|
27
|
+
output.should have_tag('select[id=employee_birth_datetime_3i] option[selected=selected]', '29')
|
28
|
+
output.should have_tag('select[id=employee_birth_datetime_4i] option[selected=selected]', '12')
|
29
|
+
output.should have_tag('select[id=employee_birth_datetime_5i] option[selected=selected]', '13')
|
30
|
+
output.should have_tag('select[id=employee_birth_datetime_6i] option[selected=selected]', '14')
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should override object values and use params if present" do
|
34
|
+
params["employee"] = {
|
35
|
+
"birth_datetime(1i)" => 2009,
|
36
|
+
"birth_datetime(2i)" => 2,
|
37
|
+
"birth_datetime(3i)" => 29,
|
38
|
+
"birth_datetime(4i)" => 12,
|
39
|
+
"birth_datetime(5i)" => 13,
|
40
|
+
"birth_datetime(6i)" => 14,
|
41
|
+
}
|
42
|
+
employee.birth_datetime = "2010-01-01 15:16:17"
|
43
|
+
output = datetime_select(:employee, :birth_datetime, :include_blank => true, :include_seconds => true)
|
44
|
+
output.should have_tag('select[id=employee_birth_datetime_1i] option[selected=selected]', '2009')
|
45
|
+
output.should have_tag('select[id=employee_birth_datetime_2i] option[selected=selected]', 'February')
|
46
|
+
output.should have_tag('select[id=employee_birth_datetime_3i] option[selected=selected]', '29')
|
47
|
+
output.should have_tag('select[id=employee_birth_datetime_4i] option[selected=selected]', '12')
|
48
|
+
output.should have_tag('select[id=employee_birth_datetime_5i] option[selected=selected]', '13')
|
49
|
+
output.should have_tag('select[id=employee_birth_datetime_6i] option[selected=selected]', '14')
|
50
|
+
end
|
51
|
+
|
52
|
+
it "should use attribute values from object if no params" do
|
53
|
+
employee.birth_datetime = "2009-01-02 12:13:14"
|
54
|
+
output = datetime_select(:employee, :birth_datetime, :include_blank => true, :include_seconds => true)
|
55
|
+
output.should have_tag('select[id=employee_birth_datetime_1i] option[selected=selected]', '2009')
|
56
|
+
output.should have_tag('select[id=employee_birth_datetime_2i] option[selected=selected]', 'January')
|
57
|
+
output.should have_tag('select[id=employee_birth_datetime_3i] option[selected=selected]', '2')
|
58
|
+
output.should have_tag('select[id=employee_birth_datetime_4i] option[selected=selected]', '12')
|
59
|
+
output.should have_tag('select[id=employee_birth_datetime_5i] option[selected=selected]', '13')
|
60
|
+
output.should have_tag('select[id=employee_birth_datetime_6i] option[selected=selected]', '14')
|
61
|
+
end
|
62
|
+
|
63
|
+
it "should use attribute values if params does not contain attribute params" do
|
64
|
+
employee.birth_datetime = "2009-01-02 12:13:14"
|
65
|
+
params["employee"] = { }
|
66
|
+
output = datetime_select(:employee, :birth_datetime, :include_blank => true, :include_seconds => true)
|
67
|
+
output.should have_tag('select[id=employee_birth_datetime_1i] option[selected=selected]', '2009')
|
68
|
+
output.should have_tag('select[id=employee_birth_datetime_2i] option[selected=selected]', 'January')
|
69
|
+
output.should have_tag('select[id=employee_birth_datetime_3i] option[selected=selected]', '2')
|
70
|
+
output.should have_tag('select[id=employee_birth_datetime_4i] option[selected=selected]', '12')
|
71
|
+
output.should have_tag('select[id=employee_birth_datetime_5i] option[selected=selected]', '13')
|
72
|
+
output.should have_tag('select[id=employee_birth_datetime_6i] option[selected=selected]', '14')
|
73
|
+
end
|
74
|
+
|
75
|
+
it "should not select values when attribute value is nil and has no param values" do
|
76
|
+
employee.birth_datetime = nil
|
77
|
+
output = datetime_select(:employee, :birth_datetime, :include_blank => true, :include_seconds => true)
|
78
|
+
output.should_not have_tag('select[id=employee_birth_datetime_1i] option[selected=selected]')
|
79
|
+
output.should_not have_tag('select[id=employee_birth_datetime_2i] option[selected=selected]')
|
80
|
+
output.should_not have_tag('select[id=employee_birth_datetime_3i] option[selected=selected]')
|
81
|
+
output.should_not have_tag('select[id=employee_birth_datetime_4i] option[selected=selected]')
|
82
|
+
output.should_not have_tag('select[id=employee_birth_datetime_5i] option[selected=selected]')
|
83
|
+
output.should_not have_tag('select[id=employee_birth_datetime_6i] option[selected=selected]')
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
describe "date_select" do
|
88
|
+
it "should use param values when attribute is nil" do
|
89
|
+
params["employee"] = {
|
90
|
+
"birth_date(1i)" => 2009,
|
91
|
+
"birth_date(2i)" => 2,
|
92
|
+
"birth_date(3i)" => 29,
|
93
|
+
}
|
94
|
+
employee.birth_date = nil
|
95
|
+
output = date_select(:employee, :birth_date, :include_blank => true, :include_seconds => true)
|
96
|
+
output.should have_tag('select[id=employee_birth_date_1i] option[selected=selected]', '2009')
|
97
|
+
output.should have_tag('select[id=employee_birth_date_2i] option[selected=selected]', 'February')
|
98
|
+
output.should have_tag('select[id=employee_birth_date_3i] option[selected=selected]', '29')
|
99
|
+
end
|
100
|
+
|
101
|
+
it "should override object values and use params if present" do
|
102
|
+
params["employee"] = {
|
103
|
+
"birth_date(1i)" => 2009,
|
104
|
+
"birth_date(2i)" => 2,
|
105
|
+
"birth_date(3i)" => 29,
|
106
|
+
}
|
107
|
+
employee.birth_date = "2009-03-01"
|
108
|
+
output = date_select(:employee, :birth_date, :include_blank => true, :include_seconds => true)
|
109
|
+
output.should have_tag('select[id=employee_birth_date_1i] option[selected=selected]', '2009')
|
110
|
+
output.should have_tag('select[id=employee_birth_date_2i] option[selected=selected]', 'February')
|
111
|
+
output.should have_tag('select[id=employee_birth_date_3i] option[selected=selected]', '29')
|
112
|
+
end
|
113
|
+
|
114
|
+
it "should select attribute values from object if no params" do
|
115
|
+
employee.birth_date = "2009-01-02"
|
116
|
+
output = date_select(:employee, :birth_date, :include_blank => true, :include_seconds => true)
|
117
|
+
output.should have_tag('select[id=employee_birth_date_1i] option[selected=selected]', '2009')
|
118
|
+
output.should have_tag('select[id=employee_birth_date_2i] option[selected=selected]', 'January')
|
119
|
+
output.should have_tag('select[id=employee_birth_date_3i] option[selected=selected]', '2')
|
120
|
+
end
|
121
|
+
|
122
|
+
it "should select attribute values if params does not contain attribute params" do
|
123
|
+
employee.birth_date = "2009-01-02"
|
124
|
+
params["employee"] = { }
|
125
|
+
output = date_select(:employee, :birth_date, :include_blank => true, :include_seconds => true)
|
126
|
+
output.should have_tag('select[id=employee_birth_date_1i] option[selected=selected]', '2009')
|
127
|
+
output.should have_tag('select[id=employee_birth_date_2i] option[selected=selected]', 'January')
|
128
|
+
output.should have_tag('select[id=employee_birth_date_3i] option[selected=selected]', '2')
|
129
|
+
end
|
130
|
+
|
131
|
+
it "should not select values when attribute value is nil and has no param values" do
|
132
|
+
employee.birth_date = nil
|
133
|
+
output = date_select(:employee, :birth_date, :include_blank => true, :include_seconds => true)
|
134
|
+
output.should_not have_tag('select[id=employee_birth_date_1i] option[selected=selected]')
|
135
|
+
output.should_not have_tag('select[id=employee_birth_date_2i] option[selected=selected]')
|
136
|
+
output.should_not have_tag('select[id=employee_birth_date_3i] option[selected=selected]')
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
describe "time_select" do
|
141
|
+
before do
|
142
|
+
Timecop.freeze Time.mktime(2009,1,1)
|
143
|
+
end
|
144
|
+
|
145
|
+
it "should use param values when attribute is nil" do
|
146
|
+
params["employee"] = {
|
147
|
+
"birth_time(1i)" => 2000,
|
148
|
+
"birth_time(2i)" => 1,
|
149
|
+
"birth_time(3i)" => 1,
|
150
|
+
"birth_time(4i)" => 12,
|
151
|
+
"birth_time(5i)" => 13,
|
152
|
+
"birth_time(6i)" => 14,
|
153
|
+
}
|
154
|
+
employee.birth_time = nil
|
155
|
+
output = time_select(:employee, :birth_time, :include_blank => true, :include_seconds => true)
|
156
|
+
output.should have_tag('select[id=employee_birth_time_4i] option[selected=selected]', '12')
|
157
|
+
output.should have_tag('select[id=employee_birth_time_5i] option[selected=selected]', '13')
|
158
|
+
output.should have_tag('select[id=employee_birth_time_6i] option[selected=selected]', '14')
|
159
|
+
end
|
160
|
+
|
161
|
+
it "should select attribute values from object if no params" do
|
162
|
+
employee.birth_time = "2000-01-01 12:13:14"
|
163
|
+
output = time_select(:employee, :birth_time, :include_blank => true, :include_seconds => true)
|
164
|
+
output.should have_tag('select[id=employee_birth_time_4i] option[selected=selected]', '12')
|
165
|
+
output.should have_tag('select[id=employee_birth_time_5i] option[selected=selected]', '13')
|
166
|
+
output.should have_tag('select[id=employee_birth_time_6i] option[selected=selected]', '14')
|
167
|
+
end
|
168
|
+
|
169
|
+
it "should not select values when attribute value is nil and has no param values" do
|
170
|
+
employee.birth_time = nil
|
171
|
+
output = time_select(:employee, :birth_time, :include_blank => true, :include_seconds => true)
|
172
|
+
output.should_not have_tag('select[id=employee_birth_time_4i] option[selected=selected]')
|
173
|
+
output.should_not have_tag('select[id=employee_birth_time_5i] option[selected=selected]')
|
174
|
+
output.should_not have_tag('select[id=employee_birth_time_6i] option[selected=selected]')
|
175
|
+
end
|
176
|
+
end
|
177
|
+
|
178
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe ValidatesTimeliness::Extensions::MultiparameterHandler do
|
4
|
+
let(:employee) { Employee.new }
|
5
|
+
|
6
|
+
it 'should return string value for invalid dates' do
|
7
|
+
instantiate_time_object('birth_date', [2000, 2, 31]).should == '2000-02-31'
|
8
|
+
end
|
9
|
+
|
10
|
+
it 'should return string value for invalid datetimes' do
|
11
|
+
instantiate_time_object('birth_datetime', [2000, 2, 31, 12, 0, 0]).should == '2000-02-31 12:00:00'
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'should return Time value for valid datetimes' do
|
15
|
+
instantiate_time_object('birth_datetime', [2000, 2, 28, 12, 0, 0]).should be_kind_of(Time)
|
16
|
+
end
|
17
|
+
|
18
|
+
def instantiate_time_object(name, values)
|
19
|
+
employee.send(:instantiate_time_object, name, values)
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe ValidatesTimeliness::HelperMethods do
|
4
|
+
it 'should define class validation methods on extended classes' do
|
5
|
+
ActiveRecord::Base.should respond_to(:validates_date)
|
6
|
+
ActiveRecord::Base.should respond_to(:validates_time)
|
7
|
+
ActiveRecord::Base.should respond_to(:validates_datetime)
|
8
|
+
end
|
9
|
+
|
10
|
+
it 'should define instance validation methods on extended classes' do
|
11
|
+
ActiveRecord::Base.instance_methods.should include('validates_date')
|
12
|
+
ActiveRecord::Base.instance_methods.should include('validates_time')
|
13
|
+
ActiveRecord::Base.instance_methods.should include('validates_datetime')
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'should validate instance when validation method called' do
|
17
|
+
r = Employee.new
|
18
|
+
r.validates_date :birth_date
|
19
|
+
r.errors[:birth_date].should_not be_empty
|
20
|
+
end
|
21
|
+
|
22
|
+
describe ".timeliness_validated_attributes" do
|
23
|
+
it 'should return attributes validated with plugin validator' do
|
24
|
+
Person.timeliness_validated_attributes = {}
|
25
|
+
Person.validates_date :birth_date
|
26
|
+
Person.validates_time :birth_time
|
27
|
+
Person.validates_datetime :birth_datetime
|
28
|
+
|
29
|
+
Person.timeliness_validated_attributes.should == {
|
30
|
+
"birth_date" => :date,
|
31
|
+
"birth_time" => :time,
|
32
|
+
"birth_datetime" => :datetime
|
33
|
+
}
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|