markos_validates_timeliness 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.
Files changed (35) hide show
  1. data/CHANGELOG +121 -0
  2. data/LICENSE +20 -0
  3. data/README.rdoc +402 -0
  4. data/Rakefile +52 -0
  5. data/TODO +8 -0
  6. data/lib/validates_timeliness/action_view/instance_tag.rb +52 -0
  7. data/lib/validates_timeliness/active_record/attribute_methods.rb +77 -0
  8. data/lib/validates_timeliness/active_record/multiparameter_attributes.rb +69 -0
  9. data/lib/validates_timeliness/formats.rb +368 -0
  10. data/lib/validates_timeliness/locale/en.new.yml +18 -0
  11. data/lib/validates_timeliness/locale/en.old.yml +18 -0
  12. data/lib/validates_timeliness/matcher.rb +1 -0
  13. data/lib/validates_timeliness/parser.rb +44 -0
  14. data/lib/validates_timeliness/spec/rails/matchers/validate_timeliness.rb +162 -0
  15. data/lib/validates_timeliness/validation_methods.rb +46 -0
  16. data/lib/validates_timeliness/validator.rb +230 -0
  17. data/lib/validates_timeliness/version.rb +3 -0
  18. data/lib/validates_timeliness.rb +59 -0
  19. data/spec/action_view/instance_tag_spec.rb +194 -0
  20. data/spec/active_record/attribute_methods_spec.rb +157 -0
  21. data/spec/active_record/multiparameter_attributes_spec.rb +118 -0
  22. data/spec/formats_spec.rb +313 -0
  23. data/spec/ginger_scenarios.rb +19 -0
  24. data/spec/parser_spec.rb +65 -0
  25. data/spec/resources/application.rb +2 -0
  26. data/spec/resources/person.rb +3 -0
  27. data/spec/resources/schema.rb +10 -0
  28. data/spec/resources/sqlite_patch.rb +19 -0
  29. data/spec/spec/rails/matchers/validate_timeliness_spec.rb +245 -0
  30. data/spec/spec_helper.rb +58 -0
  31. data/spec/time_travel/MIT-LICENSE +20 -0
  32. data/spec/time_travel/time_extensions.rb +33 -0
  33. data/spec/time_travel/time_travel.rb +12 -0
  34. data/spec/validator_spec.rb +723 -0
  35. metadata +104 -0
@@ -0,0 +1,194 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe 'ValidatesTimeliness::ActionView::InstanceTag' do
4
+ include ActionView::Helpers::DateHelper
5
+ include ActionController::Assertions::SelectorAssertions
6
+
7
+ before do
8
+ @person = Person.new
9
+ end
10
+
11
+ def params
12
+ @params ||= {}
13
+ end
14
+
15
+ describe "datetime_select" do
16
+ it "should use param values when attribute is nil" do
17
+ params["person"] = {
18
+ "birth_date_and_time(1i)" => 2009,
19
+ "birth_date_and_time(2i)" => 2,
20
+ "birth_date_and_time(3i)" => 29,
21
+ "birth_date_and_time(4i)" => 12,
22
+ "birth_date_and_time(5i)" => 13,
23
+ "birth_date_and_time(6i)" => 14,
24
+ }
25
+ @person.birth_date_and_time = nil
26
+ output = datetime_select(:person, :birth_date_and_time, :include_blank => true, :include_seconds => true)
27
+ output.should have_tag('select[id=person_birth_date_and_time_1i] option[selected=selected]', '2009')
28
+ output.should have_tag('select[id=person_birth_date_and_time_2i] option[selected=selected]', 'February')
29
+ output.should have_tag('select[id=person_birth_date_and_time_3i] option[selected=selected]', '29')
30
+ output.should have_tag('select[id=person_birth_date_and_time_4i] option[selected=selected]', '12')
31
+ output.should have_tag('select[id=person_birth_date_and_time_5i] option[selected=selected]', '13')
32
+ output.should have_tag('select[id=person_birth_date_and_time_6i] option[selected=selected]', '14')
33
+ end
34
+
35
+ it "should override object values and use params if present" do
36
+ params["person"] = {
37
+ "birth_date_and_time(1i)" => 2009,
38
+ "birth_date_and_time(2i)" => 2,
39
+ "birth_date_and_time(3i)" => 29,
40
+ "birth_date_and_time(4i)" => 13,
41
+ "birth_date_and_time(5i)" => 14,
42
+ "birth_date_and_time(6i)" => 15,
43
+ }
44
+ @person.birth_date_and_time = "2009-03-01 13:14:15"
45
+ output = datetime_select(:person, :birth_date_and_time, :include_blank => true, :include_seconds => true)
46
+ output.should have_tag('select[id=person_birth_date_and_time_1i] option[selected=selected]', '2009')
47
+ output.should have_tag('select[id=person_birth_date_and_time_2i] option[selected=selected]', 'February')
48
+ output.should have_tag('select[id=person_birth_date_and_time_3i] option[selected=selected]', '29')
49
+ output.should have_tag('select[id=person_birth_date_and_time_4i] option[selected=selected]', '13')
50
+ output.should have_tag('select[id=person_birth_date_and_time_5i] option[selected=selected]', '14')
51
+ output.should have_tag('select[id=person_birth_date_and_time_6i] option[selected=selected]', '15')
52
+ end
53
+
54
+ it "should select attribute values from object if no params" do
55
+ @person.birth_date_and_time = "2009-01-02 13:14:15"
56
+ output = datetime_select(:person, :birth_date_and_time, :include_blank => true, :include_seconds => true)
57
+ output.should have_tag('select[id=person_birth_date_and_time_1i] option[selected=selected]', '2009')
58
+ output.should have_tag('select[id=person_birth_date_and_time_2i] option[selected=selected]', 'January')
59
+ output.should have_tag('select[id=person_birth_date_and_time_3i] option[selected=selected]', '2')
60
+ output.should have_tag('select[id=person_birth_date_and_time_4i] option[selected=selected]', '13')
61
+ output.should have_tag('select[id=person_birth_date_and_time_5i] option[selected=selected]', '14')
62
+ output.should have_tag('select[id=person_birth_date_and_time_6i] option[selected=selected]', '15')
63
+ end
64
+
65
+ it "should select attribute values if params does not contain attribute params" do
66
+ @person.birth_date_and_time = "2009-01-02 13:14:15"
67
+ params["person"] = { }
68
+ output = datetime_select(:person, :birth_date_and_time, :include_blank => true, :include_seconds => true)
69
+ output.should have_tag('select[id=person_birth_date_and_time_1i] option[selected=selected]', '2009')
70
+ output.should have_tag('select[id=person_birth_date_and_time_2i] option[selected=selected]', 'January')
71
+ output.should have_tag('select[id=person_birth_date_and_time_3i] option[selected=selected]', '2')
72
+ output.should have_tag('select[id=person_birth_date_and_time_4i] option[selected=selected]', '13')
73
+ output.should have_tag('select[id=person_birth_date_and_time_5i] option[selected=selected]', '14')
74
+ output.should have_tag('select[id=person_birth_date_and_time_6i] option[selected=selected]', '15')
75
+ end
76
+
77
+ it "should not select values when attribute value is nil and has no param values" do
78
+ @person.birth_date_and_time = nil
79
+ output = datetime_select(:person, :birth_date_and_time, :include_blank => true, :include_seconds => true)
80
+ output.should_not have_tag('select[id=person_birth_date_and_time_1i] option[selected=selected]')
81
+ output.should_not have_tag('select[id=person_birth_date_and_time_2i] option[selected=selected]')
82
+ output.should_not have_tag('select[id=person_birth_date_and_time_3i] option[selected=selected]')
83
+ output.should_not have_tag('select[id=person_birth_date_and_time_4i] option[selected=selected]')
84
+ output.should_not have_tag('select[id=person_birth_date_and_time_5i] option[selected=selected]')
85
+ output.should_not have_tag('select[id=person_birth_date_and_time_6i] option[selected=selected]')
86
+ end
87
+ end
88
+
89
+ describe "date_select" do
90
+ it "should use param values when attribute is nil" do
91
+ params["person"] = {
92
+ "birth_date(1i)" => 2009,
93
+ "birth_date(2i)" => 2,
94
+ "birth_date(3i)" => 29,
95
+ }
96
+ @person.birth_date = nil
97
+ output = date_select(:person, :birth_date, :include_blank => true, :include_seconds => true)
98
+ output.should have_tag('select[id=person_birth_date_1i] option[selected=selected]', '2009')
99
+ output.should have_tag('select[id=person_birth_date_2i] option[selected=selected]', 'February')
100
+ output.should have_tag('select[id=person_birth_date_3i] option[selected=selected]', '29')
101
+ end
102
+
103
+ it "should override object values and use params if present" do
104
+ params["person"] = {
105
+ "birth_date(1i)" => 2009,
106
+ "birth_date(2i)" => 2,
107
+ "birth_date(3i)" => 29,
108
+ }
109
+ @person.birth_date = "2009-03-01"
110
+ output = date_select(:person, :birth_date, :include_blank => true, :include_seconds => true)
111
+ output.should have_tag('select[id=person_birth_date_1i] option[selected=selected]', '2009')
112
+ output.should have_tag('select[id=person_birth_date_2i] option[selected=selected]', 'February')
113
+ output.should have_tag('select[id=person_birth_date_3i] option[selected=selected]', '29')
114
+ end
115
+
116
+ it "should select attribute values from object if no params" do
117
+ @person.birth_date = "2009-01-02"
118
+ output = date_select(:person, :birth_date, :include_blank => true, :include_seconds => true)
119
+ output.should have_tag('select[id=person_birth_date_1i] option[selected=selected]', '2009')
120
+ output.should have_tag('select[id=person_birth_date_2i] option[selected=selected]', 'January')
121
+ output.should have_tag('select[id=person_birth_date_3i] option[selected=selected]', '2')
122
+ end
123
+
124
+ it "should select attribute values if params does not contain attribute params" do
125
+ @person.birth_date = "2009-01-02"
126
+ params["person"] = { }
127
+ output = date_select(:person, :birth_date, :include_blank => true, :include_seconds => true)
128
+ output.should have_tag('select[id=person_birth_date_1i] option[selected=selected]', '2009')
129
+ output.should have_tag('select[id=person_birth_date_2i] option[selected=selected]', 'January')
130
+ output.should have_tag('select[id=person_birth_date_3i] option[selected=selected]', '2')
131
+ end
132
+
133
+ it "should not select values when attribute value is nil and has no param values" do
134
+ @person.birth_date = nil
135
+ output = date_select(:person, :birth_date, :include_blank => true, :include_seconds => true)
136
+ output.should_not have_tag('select[id=person_birth_date_1i] option[selected=selected]')
137
+ output.should_not have_tag('select[id=person_birth_date_2i] option[selected=selected]')
138
+ output.should_not have_tag('select[id=person_birth_date_3i] option[selected=selected]')
139
+ end
140
+ end
141
+
142
+ describe "time_select" do
143
+ before :all do
144
+ Time.now = Time.mktime(2009,1,1)
145
+ end
146
+
147
+ it "should use param values when attribute is nil" do
148
+ params["person"] = {
149
+ "birth_time(1i)" => 2000,
150
+ "birth_time(2i)" => 1,
151
+ "birth_time(3i)" => 1,
152
+ "birth_time(4i)" => 12,
153
+ "birth_time(5i)" => 13,
154
+ "birth_time(6i)" => 14,
155
+ }
156
+ @person.birth_time = nil
157
+ output = time_select(:person, :birth_time, :include_blank => true, :include_seconds => true)
158
+ output.should have_tag('input[id=person_birth_time_1i][value=2000]')
159
+ output.should have_tag('input[id=person_birth_time_2i][value=1]')
160
+ output.should have_tag('input[id=person_birth_time_3i][value=1]')
161
+ output.should have_tag('select[id=person_birth_time_4i] option[selected=selected]', '12')
162
+ output.should have_tag('select[id=person_birth_time_5i] option[selected=selected]', '13')
163
+ output.should have_tag('select[id=person_birth_time_6i] option[selected=selected]', '14')
164
+ end
165
+
166
+ it "should select attribute values from object if no params" do
167
+ @person.birth_time = "13:14:15"
168
+ output = time_select(:person, :birth_time, :include_blank => true, :include_seconds => true)
169
+ output.should have_tag('input[id=person_birth_time_1i][value=2000]')
170
+ output.should have_tag('input[id=person_birth_time_2i][value=1]')
171
+ output.should have_tag('input[id=person_birth_time_3i][value=1]')
172
+ output.should have_tag('select[id=person_birth_time_4i] option[selected=selected]', '13')
173
+ output.should have_tag('select[id=person_birth_time_5i] option[selected=selected]', '14')
174
+ output.should have_tag('select[id=person_birth_time_6i] option[selected=selected]', '15')
175
+ end
176
+
177
+ it "should not select values when attribute value is nil and has no param values" do
178
+ @person.birth_time = nil
179
+ output = time_select(:person, :birth_time, :include_blank => true, :include_seconds => true)
180
+ output.should have_tag('input[id=person_birth_time_1i][value=""]')
181
+ # Annoyingly these may or not have value attribute depending on rails version.
182
+ # output.should have_tag('input[id=person_birth_time_2i][value=""]')
183
+ # output.should have_tag('input[id=person_birth_time_3i][value=""]')
184
+ output.should_not have_tag('select[id=person_birth_time_4i] option[selected=selected]')
185
+ output.should_not have_tag('select[id=person_birth_time_5i] option[selected=selected]')
186
+ output.should_not have_tag('select[id=person_birth_time_6i] option[selected=selected]')
187
+ end
188
+
189
+ after :all do
190
+ Time.now = nil
191
+ end
192
+ end
193
+
194
+ end
@@ -0,0 +1,157 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe ValidatesTimeliness::ActiveRecord::AttributeMethods do
4
+ before do
5
+ @person = Person.new
6
+ end
7
+
8
+ it "should define and call write method on first assign" do
9
+ Person.class_eval { @generated_methods = Set.new; @_defined_class_methods = nil }
10
+ Person.send(:undef_method, :birth_date=) if Person.instance_methods.include?('birth_date=')
11
+ person = Person.new
12
+ person.should_receive(:write_date_time_attribute)
13
+ person.birth_date = "2000-01-01"
14
+ end
15
+
16
+ it "should call write_date_time_attribute when time attribute assigned value" do
17
+ @person.should_receive(:write_date_time_attribute)
18
+ @person.birth_time = "12:00"
19
+ end
20
+
21
+ it "should call write_date_time_attribute when datetime attribute assigned value" do
22
+ @person.should_receive(:write_date_time_attribute)
23
+ @person.birth_date_and_time = "2000-01-01 12:00"
24
+ end
25
+
26
+ it "should call parser on write for datetime attribute" do
27
+ ValidatesTimeliness::Parser.should_receive(:parse).once
28
+ @person.birth_date_and_time = "2000-01-01 02:03:04"
29
+ end
30
+
31
+ it "should call parser on write for date attribute" do
32
+ ValidatesTimeliness::Parser.should_receive(:parse).once
33
+ @person.birth_date = "2000-01-01"
34
+ end
35
+
36
+ it "should call parser on write for time attribute" do
37
+ ValidatesTimeliness::Parser.should_receive(:parse).once
38
+ @person.birth_time = "12:00"
39
+ end
40
+
41
+ it "should return raw string value for attribute_before_type_cast when written as string" do
42
+ time_string = "2000-01-01 02:03:04"
43
+ @person.birth_date_and_time = time_string
44
+ @person.birth_date_and_time_before_type_cast.should == time_string
45
+ end
46
+
47
+ it "should return Time object for attribute_before_type_cast when written as Time" do
48
+ @person.birth_date_and_time = Time.mktime(2000, 1, 1, 2, 3, 4)
49
+ @person.birth_date_and_time_before_type_cast.should be_kind_of(Time)
50
+ end
51
+
52
+ it "should return Time object for datetime attribute read method when assigned Time object" do
53
+ @person.birth_date_and_time = Time.now
54
+ @person.birth_date_and_time.should be_kind_of(Time)
55
+ end
56
+
57
+ it "should return Time object for datetime attribute read method when assigned Date object" do
58
+ @person.birth_date_and_time = Date.today
59
+ @person.birth_date_and_time.should be_kind_of(Time)
60
+ end
61
+
62
+ it "should return Time object for datetime attribute read method when assigned string" do
63
+ @person.birth_date_and_time = "2000-01-01 02:03:04"
64
+ @person.birth_date_and_time.should be_kind_of(Time)
65
+ end
66
+
67
+ it "should return Date object for date attribute read method when assigned Date object" do
68
+ @person.birth_date = Date.today
69
+ @person.birth_date.should be_kind_of(Date)
70
+ end
71
+
72
+ it "should return Date object for date attribute read method when assigned string" do
73
+ @person.birth_date = '2000-01-01'
74
+ @person.birth_date.should be_kind_of(Date)
75
+ end
76
+
77
+ it "should return nil when time is invalid" do
78
+ @person.birth_date_and_time = "2000-01-32 02:03:04"
79
+ @person.birth_date_and_time.should be_nil
80
+ end
81
+
82
+ it "should not save invalid date value to database" do
83
+ time_string = "2000-01-32 02:03:04"
84
+ @person.birth_date_and_time = time_string
85
+ @person.save
86
+ @person.reload
87
+ @person.birth_date_and_time_before_type_cast.should be_nil
88
+ end
89
+
90
+ if RAILS_VER < '2.1'
91
+
92
+ it "should return time object from database in default timezone" do
93
+ ActiveRecord::Base.default_timezone = :utc
94
+ time_string = "2000-01-01 09:00:00"
95
+ @person.birth_date_and_time = time_string
96
+ @person.save
97
+ @person.reload
98
+ @person.birth_date_and_time.strftime('%Y-%m-%d %H:%M:%S %Z').should == time_string + ' UTC'
99
+ end
100
+
101
+ else
102
+
103
+ it "should return stored time string as Time with correct timezone" do
104
+ Time.zone = 'Melbourne'
105
+ time_string = "2000-06-01 02:03:04"
106
+ @person.birth_date_and_time = time_string
107
+ @person.birth_date_and_time.strftime('%Y-%m-%d %H:%M:%S %Z %z').should == time_string + ' EST +1000'
108
+ end
109
+
110
+ it "should return time object from database in correct timezone" do
111
+ Time.zone = 'Melbourne'
112
+ time_string = "2000-06-01 09:00:00"
113
+ @person.birth_date_and_time = time_string
114
+ @person.save
115
+ @person.reload
116
+ @person.birth_date_and_time.strftime('%Y-%m-%d %H:%M:%S %Z %z').should == time_string + ' EST +1000'
117
+ end
118
+
119
+ end
120
+
121
+ it "should return correct date value after new value assigned" do
122
+ today = Date.today
123
+ tomorrow = Date.today + 1.day
124
+ @person.birth_date = today
125
+ @person.birth_date.should == today
126
+ @person.birth_date = tomorrow
127
+ @person.birth_date.should == tomorrow
128
+ end
129
+
130
+ it "should update date attribute on existing object" do
131
+ today = Date.today
132
+ tomorrow = Date.today + 1.day
133
+ person = Person.create(:birth_date => today)
134
+ person.birth_date = tomorrow
135
+ person.save!
136
+ person.reload
137
+ person.birth_date.should == tomorrow
138
+ end
139
+
140
+ describe "attribute writer" do
141
+
142
+ it "should be able to be overridden in class" do
143
+ Person.class_eval { attr_accessor :birth_date }
144
+ person = Person.new
145
+ person.birth_date = 'overriden'
146
+ person.birth_date.should == 'overriden'
147
+ end
148
+
149
+ after do
150
+ Person.class_eval do
151
+ undef_method(:birth_date)
152
+ undef_method(:birth_date=)
153
+ end
154
+ end
155
+ end
156
+
157
+ end
@@ -0,0 +1,118 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe ValidatesTimeliness::ActiveRecord::MultiparameterAttributes do
4
+ def obj
5
+ @obj ||= Person.new
6
+ end
7
+
8
+ it "should convert array for datetime type into datetime string" do
9
+ time_string = time_array_to_string([2000,2,1,9,10,11], :datetime)
10
+ time_string.should == "2000-02-01 09:10:11"
11
+ end
12
+
13
+ it "should convert array for date type into date string" do
14
+ time_string = time_array_to_string([2000,2,1], :date)
15
+ time_string.should == "2000-02-01"
16
+ end
17
+
18
+ it "should convert array for time type into time string" do
19
+ time_string = time_array_to_string([2000,1,1,9,10,11], :time)
20
+ time_string.should == "09:10:11"
21
+ end
22
+
23
+ describe "execute_callstack_for_multiparameter_attributes" do
24
+
25
+ describe "for valid values" do
26
+ before do
27
+ @callstack = {
28
+ 'birth_date_and_time' => [2000,2,1,9,10,11],
29
+ 'birth_date' => [2000,2,1,9,10,11],
30
+ 'birth_time' => [2000,2,1,9,10,11]
31
+ }
32
+ end
33
+
34
+ it "should store datetime string for datetime column" do
35
+ obj.should_receive(:birth_date_and_time=).once.with("2000-02-01 09:10:11")
36
+ obj.send(:execute_callstack_for_multiparameter_attributes, @callstack)
37
+ end
38
+
39
+ it "should store date string for a date column" do
40
+ obj.should_receive(:birth_date=).once.with("2000-02-01")
41
+ obj.send(:execute_callstack_for_multiparameter_attributes, @callstack)
42
+ end
43
+
44
+ it "should store time string for a time column" do
45
+ obj.should_receive(:birth_time=).once.with("09:10:11")
46
+ obj.send(:execute_callstack_for_multiparameter_attributes, @callstack)
47
+ end
48
+ end
49
+
50
+ describe "for invalid values" do
51
+ before do
52
+ @callstack = {
53
+ 'birth_date_and_time' => [2000,13,1,9,10,11],
54
+ 'birth_date' => [2000,2,41,9,10,11],
55
+ 'birth_time' => [2000,2,1,25,10,11]
56
+ }
57
+ end
58
+
59
+ it "should store invalid datetime string for datetime column" do
60
+ obj.should_receive(:birth_date_and_time=).once.with("2000-13-01 09:10:11")
61
+ obj.send(:execute_callstack_for_multiparameter_attributes, @callstack)
62
+ end
63
+
64
+ it "should store invalid date string for a date column" do
65
+ obj.should_receive(:birth_date=).once.with("2000-02-41")
66
+ obj.send(:execute_callstack_for_multiparameter_attributes, @callstack)
67
+ end
68
+
69
+ it "should store invalid time string for a time column" do
70
+ obj.should_receive(:birth_time=).once.with("25:10:11")
71
+ obj.send(:execute_callstack_for_multiparameter_attributes, @callstack)
72
+ end
73
+ end
74
+
75
+ describe "for missing values" do
76
+ it "should store nil if all datetime values nil" do
77
+ obj.should_receive(:birth_date_and_time=).once.with(nil)
78
+ callstack = { 'birth_date_and_time' => [nil,nil,nil,nil,nil,nil] }
79
+ obj.send(:execute_callstack_for_multiparameter_attributes, callstack)
80
+ end
81
+
82
+ it "should store nil year as empty value in string" do
83
+ obj.should_receive(:birth_date_and_time=).once.with("-02-01 09:10:11")
84
+ callstack = { 'birth_date_and_time' => [nil,2,1,9,10,11] }
85
+ obj.send(:execute_callstack_for_multiparameter_attributes, callstack)
86
+ end
87
+
88
+ it "should store nil month as empty value in string" do
89
+ obj.should_receive(:birth_date_and_time=).once.with("2000--01 09:10:11")
90
+ callstack = { 'birth_date_and_time' => [2000,nil,1,9,10,11] }
91
+ obj.send(:execute_callstack_for_multiparameter_attributes, callstack)
92
+ end
93
+
94
+ it "should store nil day as empty value in string" do
95
+ obj.should_receive(:birth_date_and_time=).once.with("2000-02- 09:10:11")
96
+ callstack = { 'birth_date_and_time' => [2000,2,nil,9,10,11] }
97
+ obj.send(:execute_callstack_for_multiparameter_attributes, callstack)
98
+ end
99
+
100
+ it "should store nil hour as empty value in string" do
101
+ obj.should_receive(:birth_date_and_time=).once.with("2000-02-01 :10:11")
102
+ callstack = { 'birth_date_and_time' => [2000,2,1,nil,10,11] }
103
+ obj.send(:execute_callstack_for_multiparameter_attributes, callstack)
104
+ end
105
+
106
+ it "should store nil minute as empty value in string" do
107
+ obj.should_receive(:birth_date_and_time=).once.with("2000-02-01 09:10:")
108
+ callstack = { 'birth_date_and_time' => [2000,2,1,9,10,nil] }
109
+ obj.send(:execute_callstack_for_multiparameter_attributes, callstack)
110
+ end
111
+ end
112
+ end
113
+
114
+ def time_array_to_string(*args)
115
+ ValidatesTimeliness::ActiveRecord.time_array_to_string(*args)
116
+ end
117
+
118
+ end