validates_timeliness 4.1.1 → 5.0.0.alpha1
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.
- checksums.yaml +4 -4
- data/.travis.yml +8 -12
- data/CHANGELOG.rdoc +7 -11
- data/README.rdoc +4 -5
- data/gemfiles/rails_5_0.gemfile +18 -0
- data/gemfiles/rails_5_1.gemfile +18 -0
- data/gemfiles/rails_5_2.gemfile +18 -0
- data/lib/validates_timeliness.rb +1 -1
- data/lib/validates_timeliness/attribute_methods.rb +32 -71
- data/lib/validates_timeliness/{conversion.rb → converter.rb} +26 -14
- data/lib/validates_timeliness/extensions.rb +2 -2
- data/lib/validates_timeliness/extensions/date_time_select.rb +23 -27
- data/lib/validates_timeliness/extensions/multiparameter_handler.rb +47 -66
- data/lib/validates_timeliness/orm/active_model.rb +53 -2
- data/lib/validates_timeliness/orm/active_record.rb +1 -83
- data/lib/validates_timeliness/railtie.rb +0 -8
- data/lib/validates_timeliness/validator.rb +18 -15
- data/lib/validates_timeliness/version.rb +1 -1
- data/spec/spec_helper.rb +2 -2
- data/spec/support/test_model.rb +4 -2
- data/spec/validates_timeliness/attribute_methods_spec.rb +0 -15
- data/spec/validates_timeliness/{conversion_spec.rb → converter_spec.rb} +64 -49
- data/spec/validates_timeliness/extensions/date_time_select_spec.rb +27 -27
- data/spec/validates_timeliness/extensions/multiparameter_handler_spec.rb +10 -10
- data/spec/validates_timeliness/orm/active_record_spec.rb +72 -136
- data/validates_timeliness.gemspec +1 -1
- metadata +15 -21
- data/gemfiles/rails_4_2.gemfile +0 -14
- data/spec/validates_timeliness/railtie_spec.rb +0 -22
@@ -20,8 +20,8 @@ RSpec.describe 'ValidatesTimeliness::Extensions::DateTimeSelect' do
|
|
20
20
|
"birth_datetime(6i)" => '14',
|
21
21
|
}
|
22
22
|
person.birth_datetime = nil
|
23
|
-
@output = datetime_select(:person, :birth_datetime, :
|
24
|
-
should_have_datetime_selected(:birth_datetime, :
|
23
|
+
@output = datetime_select(:person, :birth_datetime, include_blank: true, include_seconds: true)
|
24
|
+
should_have_datetime_selected(:birth_datetime, year: 2009, month: 'February', day: 29, hour: 12, min: 13, sec: 14)
|
25
25
|
end
|
26
26
|
|
27
27
|
it "should override object values and use params if present" do
|
@@ -34,26 +34,26 @@ RSpec.describe 'ValidatesTimeliness::Extensions::DateTimeSelect' do
|
|
34
34
|
"birth_datetime(6i)" => '14',
|
35
35
|
}
|
36
36
|
person.birth_datetime = "2010-01-01 15:16:17"
|
37
|
-
@output = datetime_select(:person, :birth_datetime, :
|
38
|
-
should_have_datetime_selected(:birth_datetime, :
|
37
|
+
@output = datetime_select(:person, :birth_datetime, include_blank: true, include_seconds: true)
|
38
|
+
should_have_datetime_selected(:birth_datetime, year: 2009, month: 'February', day: 29, hour: 12, min: 13, sec: 14)
|
39
39
|
end
|
40
40
|
|
41
41
|
it "should use attribute values from object if no params" do
|
42
42
|
person.birth_datetime = "2009-01-02 12:13:14"
|
43
|
-
@output = datetime_select(:person, :birth_datetime, :
|
44
|
-
should_have_datetime_selected(:birth_datetime, :
|
43
|
+
@output = datetime_select(:person, :birth_datetime, include_blank: true, include_seconds: true)
|
44
|
+
should_have_datetime_selected(:birth_datetime, year: 2009, month: 'January', day: 2, hour: 12, min: 13, sec: 14)
|
45
45
|
end
|
46
46
|
|
47
47
|
it "should use attribute values if params does not contain attribute params" do
|
48
48
|
person.birth_datetime = "2009-01-02 12:13:14"
|
49
49
|
@params["person"] = { }
|
50
|
-
@output = datetime_select(:person, :birth_datetime, :
|
51
|
-
should_have_datetime_selected(:birth_datetime, :
|
50
|
+
@output = datetime_select(:person, :birth_datetime, include_blank: true, include_seconds: true)
|
51
|
+
should_have_datetime_selected(:birth_datetime, year: 2009, month: 'January', day: 2, hour: 12, min: 13, sec: 14)
|
52
52
|
end
|
53
53
|
|
54
54
|
it "should not select values when attribute value is nil and has no param values" do
|
55
55
|
person.birth_datetime = nil
|
56
|
-
@output = datetime_select(:person, :birth_datetime, :
|
56
|
+
@output = datetime_select(:person, :birth_datetime, include_blank: true, include_seconds: true)
|
57
57
|
should_not_have_datetime_selected(:birth_datetime, :year, :month, :day, :hour, :min, :sec)
|
58
58
|
end
|
59
59
|
end
|
@@ -66,8 +66,8 @@ RSpec.describe 'ValidatesTimeliness::Extensions::DateTimeSelect' do
|
|
66
66
|
"birth_date(3i)" => '29',
|
67
67
|
}
|
68
68
|
person.birth_date = nil
|
69
|
-
@output = date_select(:person, :birth_date, :
|
70
|
-
should_have_datetime_selected(:birth_date, :
|
69
|
+
@output = date_select(:person, :birth_date, include_blank: true)
|
70
|
+
should_have_datetime_selected(:birth_date, year: 2009, month: 'February', day: 29)
|
71
71
|
end
|
72
72
|
|
73
73
|
it "should override object values and use params if present" do
|
@@ -77,26 +77,26 @@ RSpec.describe 'ValidatesTimeliness::Extensions::DateTimeSelect' do
|
|
77
77
|
"birth_date(3i)" => '29',
|
78
78
|
}
|
79
79
|
person.birth_date = "2009-03-01"
|
80
|
-
@output = date_select(:person, :birth_date, :
|
81
|
-
should_have_datetime_selected(:birth_date, :
|
80
|
+
@output = date_select(:person, :birth_date, include_blank: true)
|
81
|
+
should_have_datetime_selected(:birth_date, year: 2009, month: 'February', day: 29)
|
82
82
|
end
|
83
83
|
|
84
84
|
it "should select attribute values from object if no params" do
|
85
85
|
person.birth_date = "2009-01-02"
|
86
|
-
@output = date_select(:person, :birth_date, :
|
87
|
-
should_have_datetime_selected(:birth_date, :
|
86
|
+
@output = date_select(:person, :birth_date, include_blank: true)
|
87
|
+
should_have_datetime_selected(:birth_date, year: 2009, month: 'January', day: 2)
|
88
88
|
end
|
89
89
|
|
90
90
|
it "should select attribute values if params does not contain attribute params" do
|
91
91
|
person.birth_date = "2009-01-02"
|
92
92
|
@params["person"] = { }
|
93
|
-
@output = date_select(:person, :birth_date, :
|
94
|
-
should_have_datetime_selected(:birth_date, :
|
93
|
+
@output = date_select(:person, :birth_date, include_blank: true)
|
94
|
+
should_have_datetime_selected(:birth_date, year: 2009, month: 'January', day: 2)
|
95
95
|
end
|
96
96
|
|
97
97
|
it "should not select values when attribute value is nil and has no param values" do
|
98
98
|
person.birth_date = nil
|
99
|
-
@output = date_select(:person, :birth_date, :
|
99
|
+
@output = date_select(:person, :birth_date, include_blank: true)
|
100
100
|
should_not_have_datetime_selected(:birth_time, :year, :month, :day)
|
101
101
|
end
|
102
102
|
|
@@ -106,8 +106,8 @@ RSpec.describe 'ValidatesTimeliness::Extensions::DateTimeSelect' do
|
|
106
106
|
"birth_date(2i)" => '2',
|
107
107
|
}
|
108
108
|
|
109
|
-
@output = date_select(:person, :birth_date, :
|
110
|
-
should_have_datetime_selected(:birth_date, :
|
109
|
+
@output = date_select(:person, :birth_date, include_blank: true, discard_day: true)
|
110
|
+
should_have_datetime_selected(:birth_date, year: 2009, month: 'February')
|
111
111
|
should_not_have_datetime_selected(:birth_time, :day)
|
112
112
|
expect(@output).to have_tag("input[id=person_birth_date_3i][type=hidden][value='1']")
|
113
113
|
end
|
@@ -128,33 +128,33 @@ RSpec.describe 'ValidatesTimeliness::Extensions::DateTimeSelect' do
|
|
128
128
|
"birth_time(6i)" => '14',
|
129
129
|
}
|
130
130
|
person.birth_time = nil
|
131
|
-
@output = time_select(:person, :birth_time, :
|
132
|
-
should_have_datetime_selected(:birth_time, :
|
131
|
+
@output = time_select(:person, :birth_time, include_blank: true, include_seconds: true)
|
132
|
+
should_have_datetime_selected(:birth_time, hour: 12, min: 13, sec: 14)
|
133
133
|
end
|
134
134
|
|
135
135
|
it "should select attribute values from object if no params" do
|
136
136
|
person.birth_time = "2000-01-01 12:13:14"
|
137
|
-
@output = time_select(:person, :birth_time, :
|
138
|
-
should_have_datetime_selected(:birth_time, :
|
137
|
+
@output = time_select(:person, :birth_time, include_blank: true, include_seconds: true)
|
138
|
+
should_have_datetime_selected(:birth_time, hour: 12, min: 13, sec: 14)
|
139
139
|
end
|
140
140
|
|
141
141
|
it "should not select values when attribute value is nil and has no param values" do
|
142
142
|
person.birth_time = nil
|
143
|
-
@output = time_select(:person, :birth_time, :
|
143
|
+
@output = time_select(:person, :birth_time, include_blank: true, include_seconds: true)
|
144
144
|
should_not_have_datetime_selected(:birth_time, :hour, :min, :sec)
|
145
145
|
end
|
146
146
|
end
|
147
147
|
|
148
148
|
def should_have_datetime_selected(field, datetime_hash)
|
149
149
|
datetime_hash.each do |key, value|
|
150
|
-
index = {:
|
150
|
+
index = {year: 1, month: 2, day: 3, hour: 4, min: 5, sec: 6}[key]
|
151
151
|
expect(@output).to have_tag("select[id=person_#{field}_#{index}i] option[selected=selected]", value.to_s)
|
152
152
|
end
|
153
153
|
end
|
154
154
|
|
155
155
|
def should_not_have_datetime_selected(field, *attributes)
|
156
156
|
attributes.each do |attribute|
|
157
|
-
index = {:
|
157
|
+
index = {year: 1, month: 2, day: 3, hour: 4, min: 5, sec: 6}[attribute]
|
158
158
|
expect(@output).not_to have_tag("select[id=person_#{attribute}_#{index}i] option[selected=selected]")
|
159
159
|
end
|
160
160
|
end
|
@@ -1,36 +1,36 @@
|
|
1
1
|
RSpec.describe 'ValidatesTimeliness::Extensions::MultiparameterHandler' do
|
2
2
|
|
3
3
|
context "time column" do
|
4
|
-
it 'should
|
4
|
+
it 'should be nil invalid date portion' do
|
5
5
|
employee = record_with_multiparameter_attribute(:birth_datetime, [2000, 2, 31, 12, 0, 0])
|
6
|
-
expect(employee.
|
6
|
+
expect(employee.birth_datetime).to be_nil
|
7
7
|
end
|
8
8
|
|
9
9
|
it 'should assign a Time value for valid datetimes' do
|
10
10
|
employee = record_with_multiparameter_attribute(:birth_datetime, [2000, 2, 28, 12, 0, 0])
|
11
|
-
expect(employee.
|
11
|
+
expect(employee.birth_datetime).to eq Time.zone.local(2000, 2, 28, 12, 0, 0)
|
12
12
|
end
|
13
13
|
|
14
|
-
it 'should
|
14
|
+
it 'should be nil for incomplete date portion' do
|
15
15
|
employee = record_with_multiparameter_attribute(:birth_datetime, [2000, nil, nil])
|
16
|
-
expect(employee.
|
16
|
+
expect(employee.birth_datetime).to be_nil
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
20
20
|
context "date column" do
|
21
|
-
it 'should assign
|
21
|
+
it 'should assign nil for invalid date' do
|
22
22
|
employee = record_with_multiparameter_attribute(:birth_date, [2000, 2, 31])
|
23
|
-
expect(employee.
|
23
|
+
expect(employee.birth_date).to be_nil
|
24
24
|
end
|
25
25
|
|
26
26
|
it 'should assign a Date value for valid date' do
|
27
27
|
employee = record_with_multiparameter_attribute(:birth_date, [2000, 2, 28])
|
28
|
-
expect(employee.
|
28
|
+
expect(employee.birth_date).to eq Date.new(2000, 2, 28)
|
29
29
|
end
|
30
30
|
|
31
|
-
it 'should assign
|
31
|
+
it 'should assign hash values for incomplete date' do
|
32
32
|
employee = record_with_multiparameter_attribute(:birth_date, [2000, nil, nil])
|
33
|
-
expect(employee.
|
33
|
+
expect(employee.birth_date).to be_nil
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
@@ -1,5 +1,4 @@
|
|
1
1
|
RSpec.describe ValidatesTimeliness, 'ActiveRecord' do
|
2
|
-
|
3
2
|
context "validation methods" do
|
4
3
|
let(:record) { Employee.new }
|
5
4
|
|
@@ -26,6 +25,7 @@ RSpec.describe ValidatesTimeliness, 'ActiveRecord' do
|
|
26
25
|
record.birth_date = 'not a date'
|
27
26
|
|
28
27
|
record.valid?
|
28
|
+
expect(record.birth_date_before_type_cast).to eq 'not a date'
|
29
29
|
expect(record.errors[:birth_date]).not_to be_empty
|
30
30
|
end
|
31
31
|
|
@@ -37,10 +37,6 @@ RSpec.describe ValidatesTimeliness, 'ActiveRecord' do
|
|
37
37
|
end
|
38
38
|
end
|
39
39
|
|
40
|
-
it 'should determine type for attribute' do
|
41
|
-
expect(Employee.timeliness_attribute_type(:birth_date)).to eq :date
|
42
|
-
end
|
43
|
-
|
44
40
|
context 'attribute timezone awareness' do
|
45
41
|
let(:klass) {
|
46
42
|
Class.new(ActiveRecord::Base) do
|
@@ -53,22 +49,6 @@ RSpec.describe ValidatesTimeliness, 'ActiveRecord' do
|
|
53
49
|
validates_datetime :some_datetime
|
54
50
|
end
|
55
51
|
}
|
56
|
-
|
57
|
-
context 'for column attribute' do
|
58
|
-
it 'should be detected from column type' do
|
59
|
-
expect(klass.timeliness_attribute_timezone_aware?(:birth_date)).to be_falsey
|
60
|
-
expect(klass.timeliness_attribute_timezone_aware?(:birth_time)).to be_falsey
|
61
|
-
expect(klass.timeliness_attribute_timezone_aware?(:birth_datetime)).to be_truthy
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
context 'for non-column attribute' do
|
66
|
-
it 'should be detected from the validation type' do
|
67
|
-
expect(klass.timeliness_attribute_timezone_aware?(:some_date)).to be_falsey
|
68
|
-
expect(klass.timeliness_attribute_timezone_aware?(:some_time)).to be_falsey
|
69
|
-
expect(klass.timeliness_attribute_timezone_aware?(:some_datetime)).to be_truthy
|
70
|
-
end
|
71
|
-
end
|
72
52
|
end
|
73
53
|
|
74
54
|
context "attribute write method" do
|
@@ -79,34 +59,6 @@ RSpec.describe ValidatesTimeliness, 'ActiveRecord' do
|
|
79
59
|
validates_datetime :birth_datetime, :allow_blank => true
|
80
60
|
end
|
81
61
|
|
82
|
-
context 'value cache' do
|
83
|
-
let(:record) { EmployeeWithCache.new }
|
84
|
-
|
85
|
-
context 'for datetime column' do
|
86
|
-
it 'should store raw value' do
|
87
|
-
record.birth_datetime = datetime_string = '2010-01-01 12:30'
|
88
|
-
|
89
|
-
expect(record.read_timeliness_attribute_before_type_cast('birth_datetime')).to eq datetime_string
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
93
|
-
context 'for date column' do
|
94
|
-
it 'should store raw value' do
|
95
|
-
record.birth_date = date_string = '2010-01-01'
|
96
|
-
|
97
|
-
expect(record.read_timeliness_attribute_before_type_cast('birth_date')).to eq date_string
|
98
|
-
end
|
99
|
-
end
|
100
|
-
|
101
|
-
context 'for time column' do
|
102
|
-
it 'should store raw value' do
|
103
|
-
record.birth_time = time_string = '12:12'
|
104
|
-
|
105
|
-
expect(record.read_timeliness_attribute_before_type_cast('birth_time')).to eq time_string
|
106
|
-
end
|
107
|
-
end
|
108
|
-
end
|
109
|
-
|
110
62
|
context "with plugin parser" do
|
111
63
|
with_config(:use_plugin_parser, true)
|
112
64
|
let(:record) { EmployeeWithParser.new }
|
@@ -118,17 +70,23 @@ RSpec.describe ValidatesTimeliness, 'ActiveRecord' do
|
|
118
70
|
validates_datetime :birth_datetime, :allow_blank => true
|
119
71
|
end
|
120
72
|
|
73
|
+
before do
|
74
|
+
allow(Timeliness::Parser).to receive(:parse).and_call_original
|
75
|
+
end
|
76
|
+
|
121
77
|
context "for a date column" do
|
122
78
|
it 'should parse a string value' do
|
123
|
-
expect(Timeliness::Parser).to receive(:parse)
|
124
|
-
|
125
79
|
record.birth_date = '2010-01-01'
|
80
|
+
expect(record.birth_date).to eq(Date.new(2010, 1, 1))
|
81
|
+
|
82
|
+
expect(Timeliness::Parser).to have_received(:parse)
|
126
83
|
end
|
127
84
|
|
128
85
|
it 'should parse a invalid string value as nil' do
|
129
|
-
expect(Timeliness::Parser).to receive(:parse)
|
130
|
-
|
131
86
|
record.birth_date = 'not valid'
|
87
|
+
expect(record.birth_date).to be_nil
|
88
|
+
|
89
|
+
expect(Timeliness::Parser).to have_received(:parse)
|
132
90
|
end
|
133
91
|
|
134
92
|
it 'should store a Date value after parsing string' do
|
@@ -140,45 +98,85 @@ RSpec.describe ValidatesTimeliness, 'ActiveRecord' do
|
|
140
98
|
end
|
141
99
|
|
142
100
|
context "for a time column" do
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
101
|
+
around do |example|
|
102
|
+
time_zone_aware_types = ActiveRecord::Base.time_zone_aware_types.dup
|
103
|
+
example.call
|
104
|
+
ActiveRecord::Base.time_zone_aware_types = time_zone_aware_types
|
147
105
|
end
|
148
106
|
|
149
|
-
|
150
|
-
|
107
|
+
context 'timezone aware' do
|
108
|
+
with_config(:default_timezone, 'Australia/Melbourne')
|
109
|
+
|
110
|
+
before do
|
111
|
+
unless ActiveRecord::Base.time_zone_aware_types.include?(:time)
|
112
|
+
ActiveRecord::Base.time_zone_aware_types.push(:time)
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
it 'should parse a string value' do
|
117
|
+
record.birth_time = '12:30'
|
118
|
+
|
119
|
+
expect(record.birth_time).to eq('12:30'.in_time_zone)
|
120
|
+
expect(Timeliness::Parser).to have_received(:parse)
|
121
|
+
end
|
122
|
+
|
123
|
+
it 'should parse a invalid string value as nil' do
|
124
|
+
record.birth_time = 'not valid'
|
151
125
|
|
152
|
-
|
126
|
+
expect(record.birth_time).to be_nil
|
127
|
+
expect(Timeliness::Parser).to have_received(:parse)
|
128
|
+
end
|
129
|
+
|
130
|
+
it 'should store a Time value after parsing string' do
|
131
|
+
record.birth_time = '12:30'
|
132
|
+
|
133
|
+
expect(record.birth_time).to eq('12:30'.in_time_zone)
|
134
|
+
expect(record.birth_time.utc_offset).to eq '12:30'.in_time_zone.utc_offset
|
135
|
+
end
|
153
136
|
end
|
154
137
|
|
155
|
-
|
156
|
-
|
138
|
+
skip 'not timezone aware' do
|
139
|
+
before do
|
140
|
+
ActiveRecord::Base.time_zone_aware_types.delete(:time)
|
141
|
+
end
|
142
|
+
|
143
|
+
it 'should parse a string value' do
|
144
|
+
record.birth_time = '12:30'
|
145
|
+
|
146
|
+
expect(record.birth_time).to eq(Time.utc(2000,1,1,12,30))
|
147
|
+
expect(Timeliness::Parser).to have_received(:parse)
|
148
|
+
end
|
149
|
+
|
150
|
+
it 'should parse a invalid string value as nil' do
|
151
|
+
record.birth_time = 'not valid'
|
157
152
|
|
158
|
-
|
159
|
-
|
153
|
+
expect(record.birth_time).to be_nil
|
154
|
+
expect(Timeliness::Parser).to have_received(:parse)
|
155
|
+
end
|
156
|
+
|
157
|
+
it 'should store a Time value in utc' do
|
158
|
+
record.birth_time = '12:30'
|
159
|
+
|
160
|
+
expect(record.birth_time.utc_offset).to eq Time.now.utc.utc_offset
|
161
|
+
end
|
160
162
|
end
|
161
163
|
end
|
162
164
|
|
163
165
|
context "for a datetime column" do
|
164
166
|
with_config(:default_timezone, 'Australia/Melbourne')
|
165
167
|
|
166
|
-
it 'should parse a string value' do
|
167
|
-
expect(Timeliness::Parser).to receive(:parse)
|
168
|
-
|
168
|
+
it 'should parse a string value into Time value' do
|
169
169
|
record.birth_datetime = '2010-01-01 12:00'
|
170
|
+
|
171
|
+
expect(record.birth_datetime).to eq Time.zone.local(2010,1,1,12,00)
|
172
|
+
expect(Timeliness::Parser).to have_received(:parse)
|
170
173
|
end
|
171
174
|
|
172
175
|
it 'should parse a invalid string value as nil' do
|
173
|
-
expect(Timeliness::Parser).to receive(:parse)
|
174
|
-
|
175
176
|
record.birth_datetime = 'not valid'
|
176
|
-
end
|
177
|
-
|
178
|
-
it 'should parse string into Time value' do
|
179
|
-
record.birth_datetime = '2010-01-01 12:00'
|
180
177
|
|
181
|
-
expect(record.birth_datetime).to
|
178
|
+
expect(record.birth_datetime).to be_nil
|
179
|
+
expect(Timeliness::Parser).to have_received(:parse)
|
182
180
|
end
|
183
181
|
|
184
182
|
it 'should parse string as current timezone' do
|
@@ -189,66 +187,4 @@ RSpec.describe ValidatesTimeliness, 'ActiveRecord' do
|
|
189
187
|
end
|
190
188
|
end
|
191
189
|
end
|
192
|
-
|
193
|
-
context "reload" do
|
194
|
-
it 'should clear cache value' do
|
195
|
-
record = Employee.create!
|
196
|
-
record.birth_date = '2010-01-01'
|
197
|
-
|
198
|
-
record.reload
|
199
|
-
|
200
|
-
expect(record.read_timeliness_attribute_before_type_cast('birth_date')).to be_nil
|
201
|
-
end
|
202
|
-
end
|
203
|
-
|
204
|
-
context "before_type_cast method" do
|
205
|
-
let(:record) { Employee.new }
|
206
|
-
|
207
|
-
it 'should be defined on class if ORM supports it' do
|
208
|
-
expect(record).to respond_to(:birth_datetime_before_type_cast)
|
209
|
-
end
|
210
|
-
|
211
|
-
it 'should return original value' do
|
212
|
-
record.birth_datetime = date_string = '2010-01-01'
|
213
|
-
|
214
|
-
expect(record.birth_datetime_before_type_cast).to eq date_string
|
215
|
-
end
|
216
|
-
|
217
|
-
it 'should return attribute if no attribute assignment has been made' do
|
218
|
-
datetime = Time.zone.local(2010,01,01)
|
219
|
-
Employee.create(:birth_datetime => datetime)
|
220
|
-
|
221
|
-
record = Employee.last
|
222
|
-
expect(record.birth_datetime_before_type_cast).to match(/#{datetime.utc.to_s[0...-4]}/)
|
223
|
-
end
|
224
|
-
|
225
|
-
context "with plugin parser" do
|
226
|
-
with_config(:use_plugin_parser, true)
|
227
|
-
|
228
|
-
it 'should return original value' do
|
229
|
-
record.birth_datetime = date_string = '2010-01-31'
|
230
|
-
|
231
|
-
expect(record.birth_datetime_before_type_cast).to eq date_string
|
232
|
-
end
|
233
|
-
end
|
234
|
-
|
235
|
-
end
|
236
|
-
|
237
|
-
context "define_attribute_methods" do
|
238
|
-
it "returns a falsy value if the attribute methods have already been generated" do
|
239
|
-
expect(Employee.define_attribute_methods).to be_falsey
|
240
|
-
end
|
241
|
-
end
|
242
|
-
|
243
|
-
context "undefine_attribute_methods" do
|
244
|
-
it "returns remove attribute methods that have already been generated" do
|
245
|
-
Employee.define_attribute_methods
|
246
|
-
|
247
|
-
expect(Employee.instance_methods).to include(:birth_datetime)
|
248
|
-
|
249
|
-
Employee.undefine_attribute_methods
|
250
|
-
|
251
|
-
expect(Employee.instance_methods).to_not include(:birth_datetime)
|
252
|
-
end
|
253
|
-
end
|
254
190
|
end
|