multiparameter_date_time 0.0.5 → 0.0.6
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/.gitignore
CHANGED
@@ -5,15 +5,7 @@ class IsValidMultiparameterDateTimeValidator < ActiveModel::EachValidator
|
|
5
5
|
|
6
6
|
return if date_value.blank? && time_value.blank?
|
7
7
|
|
8
|
-
if date_value
|
9
|
-
date_invalid = date_value !~ MultiparameterDateTime::VALID_DATE_FORMAT
|
10
|
-
end
|
11
|
-
|
12
|
-
if time_value.present?
|
13
|
-
time_invalid = time_value !~ MultiparameterDateTime::VALID_TIME_FORMAT
|
14
|
-
end
|
15
|
-
|
16
|
-
if date_invalid || time_invalid
|
8
|
+
if date_invalid?(date_value) || time_invalid?(time_value)
|
17
9
|
record.errors.add(attribute, self.class.invalid_format_error_message)
|
18
10
|
elsif date_value.blank?
|
19
11
|
record.errors.add(attribute, "Please enter a date.")
|
@@ -37,4 +29,18 @@ class IsValidMultiparameterDateTimeValidator < ActiveModel::EachValidator
|
|
37
29
|
|
38
30
|
"Please enter a valid date and time using the following formats: #{date_string}, #{time_string}"
|
39
31
|
end
|
32
|
+
|
33
|
+
def time_invalid?(time_value)
|
34
|
+
if time_value.present?
|
35
|
+
time_invalid_standard = time_value !~ MultiparameterDateTime::VALID_STANDARD_TIME_FORMAT
|
36
|
+
time_invalid_military = time_value !~ MultiparameterDateTime::VALID_MILITARY_TIME_FORMAT
|
37
|
+
time_invalid_standard && time_invalid_military
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def date_invalid?(date_value)
|
42
|
+
if date_value.present?
|
43
|
+
date_invalid = date_value !~ MultiparameterDateTime::VALID_DATE_FORMAT
|
44
|
+
end
|
45
|
+
end
|
40
46
|
end
|
@@ -5,8 +5,9 @@ require 'is_valid_multiparameter_date_time_validator'
|
|
5
5
|
module MultiparameterDateTime
|
6
6
|
extend ActiveSupport::Concern
|
7
7
|
|
8
|
-
VALID_TIME_FORMAT = /\A\d?\d:\d{2}(:\d{2})?\s*([ap]m)?\s*([A-Z]{3,5})?\Z/
|
9
8
|
VALID_DATE_FORMAT = /\A((\d{1,2}[\/\-.]\d{1,2}[\/\-.]\d{2,4})|(\d{4}-\d{1,2}-\d{1,2}))/
|
9
|
+
VALID_STANDARD_TIME_FORMAT = /\A[0]*([1-9]|1[0-2]):\d{2}(:\d{2})?\s*([apAP][mM])?\s*([A-Z]{3,5})?\Z/
|
10
|
+
VALID_MILITARY_TIME_FORMAT = /\A[0]*([0-9]|1[0-9]|2[0-3]):\d{2}(:\d{2})?\s*([A-Z]{3,5})?\Z/
|
10
11
|
|
11
12
|
DEFAULT_DATE_FORMAT = "%-m/%-d/%Y"
|
12
13
|
DEFAULT_TIME_FORMAT = "%-I:%M %P"
|
@@ -93,7 +94,7 @@ module MultiparameterDateTime
|
|
93
94
|
private
|
94
95
|
|
95
96
|
def set_combined_datetime(name, date_string, time_string)
|
96
|
-
if date_string =~ MultiparameterDateTime::VALID_DATE_FORMAT && time_string =~ MultiparameterDateTime::
|
97
|
+
if date_string =~ MultiparameterDateTime::VALID_DATE_FORMAT && (time_string =~ MultiparameterDateTime::VALID_STANDARD_TIME_FORMAT || time_string =~ VALID_MILITARY_TIME_FORMAT)
|
97
98
|
begin
|
98
99
|
write_attribute_for_multiparameter_date_time(
|
99
100
|
name, Time.zone.parse("#{date_string} #{time_string}")
|
@@ -22,6 +22,18 @@ describe IsValidMultiparameterDateTimeValidator do
|
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
25
|
+
shared_examples_for "a valid time" do
|
26
|
+
it "should not have an error" do
|
27
|
+
record.errors[:foo].should be_empty
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
shared_examples_for "a badly formatted date or time" do
|
32
|
+
it "should show the bad format error" do
|
33
|
+
record.errors[:foo].should == [bad_format_error]
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
25
37
|
describe "#validate_each" do
|
26
38
|
subject { record }
|
27
39
|
let(:record) do
|
@@ -42,18 +54,72 @@ describe IsValidMultiparameterDateTimeValidator do
|
|
42
54
|
context "with valid date" do
|
43
55
|
let(:date_string) { "01/01/2001" }
|
44
56
|
|
45
|
-
context "with valid time" do
|
46
|
-
|
47
|
-
|
48
|
-
|
57
|
+
context "with valid time in" do
|
58
|
+
context "military format" do
|
59
|
+
context "lots of zeros" do
|
60
|
+
let(:time_string) { "00:00" }
|
61
|
+
it_should_behave_like "a valid time"
|
62
|
+
end
|
63
|
+
|
64
|
+
context "last valid value" do
|
65
|
+
let(:time_string){ "23:59" }
|
66
|
+
it_should_behave_like "a valid time"
|
67
|
+
end
|
68
|
+
|
69
|
+
context "1 pm" do
|
70
|
+
let(:time_string){ "13:00" }
|
71
|
+
it_should_behave_like "a valid time"
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
context "standard format" do
|
76
|
+
let(:time_string) { "12:31pm" }
|
77
|
+
it_should_behave_like "a valid time"
|
78
|
+
|
79
|
+
context "with a capital AM or PM" do
|
80
|
+
let(:time_string) { "12:31 PM" }
|
81
|
+
it_should_behave_like "a valid time"
|
82
|
+
end
|
83
|
+
|
84
|
+
context "without a space between the time and AM or PM" do
|
85
|
+
let(:time_string) { "12:31AM" }
|
86
|
+
it_should_behave_like "a valid time"
|
87
|
+
end
|
88
|
+
|
89
|
+
context "with no space and a mixed case aM or pM" do
|
90
|
+
let(:time_string) { "12:31aM" }
|
91
|
+
it_should_behave_like "a valid time"
|
92
|
+
end
|
93
|
+
|
94
|
+
context "with a space and a mixed case aM or pM" do
|
95
|
+
let(:time_string) { "12:31 aM" }
|
96
|
+
it_should_behave_like "a valid time"
|
97
|
+
end
|
98
|
+
|
99
|
+
context "with a space and a lower case am or pm" do
|
100
|
+
let(:time_string) { "12:31 am" }
|
101
|
+
it_should_behave_like "a valid time"
|
102
|
+
end
|
49
103
|
end
|
50
104
|
end
|
51
105
|
|
52
|
-
context "with invalid time" do
|
53
|
-
|
106
|
+
context "with invalid time in" do
|
107
|
+
context "military format" do
|
108
|
+
context "above 23:59" do
|
109
|
+
let(:time_string) { "25:00" }
|
110
|
+
it_should_behave_like "a badly formatted date or time"
|
111
|
+
end
|
54
112
|
|
55
|
-
|
56
|
-
|
113
|
+
context "with am or pm" do
|
114
|
+
let(:time_string) { "23:00 am" }
|
115
|
+
it_should_behave_like "a badly formatted date or time"
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
context "standard format" do
|
120
|
+
let(:time_string) { "90:00pm" }
|
121
|
+
|
122
|
+
it_should_behave_like "a badly formatted date or time"
|
57
123
|
end
|
58
124
|
end
|
59
125
|
|
@@ -73,25 +139,19 @@ describe IsValidMultiparameterDateTimeValidator do
|
|
73
139
|
context "with valid time" do
|
74
140
|
let(:time_string) { "12:31pm" }
|
75
141
|
|
76
|
-
|
77
|
-
record.errors[:foo].should == [bad_format_error]
|
78
|
-
end
|
142
|
+
it_should_behave_like "a badly formatted date or time"
|
79
143
|
end
|
80
144
|
|
81
145
|
context "with invalid time" do
|
82
146
|
let(:time_string) { "asdf" }
|
83
147
|
|
84
|
-
|
85
|
-
record.errors[:foo].should == [bad_format_error]
|
86
|
-
end
|
148
|
+
it_should_behave_like "a badly formatted date or time"
|
87
149
|
end
|
88
150
|
|
89
151
|
[" ", nil].each do |time_value|
|
90
152
|
context "with time = #{time_value.inspect}" do
|
91
153
|
let(:time_string) { time_value }
|
92
|
-
|
93
|
-
record.errors[:foo].should == [bad_format_error]
|
94
|
-
end
|
154
|
+
it_should_behave_like "a badly formatted date or time"
|
95
155
|
end
|
96
156
|
end
|
97
157
|
end
|
@@ -111,9 +171,7 @@ describe IsValidMultiparameterDateTimeValidator do
|
|
111
171
|
context "with invalid time" do
|
112
172
|
let(:time_string) { "asdf" }
|
113
173
|
|
114
|
-
|
115
|
-
record.errors[:foo].should == [bad_format_error]
|
116
|
-
end
|
174
|
+
it_should_behave_like "a badly formatted date or time"
|
117
175
|
end
|
118
176
|
|
119
177
|
[" ", nil].each do |time_value|
|
@@ -154,9 +212,7 @@ describe IsValidMultiparameterDateTimeValidator do
|
|
154
212
|
ModelWithDatetime.new(foo_date_part: "19/19/1919", foo_time_part: "04:50pm")
|
155
213
|
end
|
156
214
|
|
157
|
-
|
158
|
-
record.errors[:foo].should == [bad_format_error]
|
159
|
-
end
|
215
|
+
it_should_behave_like "a badly formatted date or time"
|
160
216
|
end
|
161
217
|
|
162
218
|
context "set directly" do
|
@@ -164,9 +220,7 @@ describe IsValidMultiparameterDateTimeValidator do
|
|
164
220
|
ModelWithDatetime.new(foo: "19/19/1919 04:50pm")
|
165
221
|
end
|
166
222
|
|
167
|
-
|
168
|
-
record.errors[:foo].should == [bad_format_error]
|
169
|
-
end
|
223
|
+
it_should_behave_like "a badly formatted date or time"
|
170
224
|
end
|
171
225
|
end
|
172
226
|
|
@@ -176,9 +230,7 @@ describe IsValidMultiparameterDateTimeValidator do
|
|
176
230
|
ModelWithDatetime.new(foo_date_part: "01/01/2001", foo_time_part: "09:99pm")
|
177
231
|
end
|
178
232
|
|
179
|
-
|
180
|
-
record.errors[:foo].should == [bad_format_error]
|
181
|
-
end
|
233
|
+
it_should_behave_like "a badly formatted date or time"
|
182
234
|
end
|
183
235
|
|
184
236
|
context "set directly" do
|
@@ -186,9 +238,7 @@ describe IsValidMultiparameterDateTimeValidator do
|
|
186
238
|
ModelWithDatetime.new(foo: "01/01/2001 09:99pm")
|
187
239
|
end
|
188
240
|
|
189
|
-
|
190
|
-
record.errors[:foo].should == [bad_format_error]
|
191
|
-
end
|
241
|
+
it_should_behave_like "a badly formatted date or time"
|
192
242
|
end
|
193
243
|
end
|
194
244
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: multiparameter_date_time
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -12,7 +12,7 @@ authors:
|
|
12
12
|
autorequire:
|
13
13
|
bindir: bin
|
14
14
|
cert_chain: []
|
15
|
-
date:
|
15
|
+
date: 2013-10-03 00:00:00.000000000 Z
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
18
18
|
name: american_date
|
@@ -152,10 +152,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
152
152
|
version: '0'
|
153
153
|
segments:
|
154
154
|
- 0
|
155
|
-
hash:
|
155
|
+
hash: -4212657700101252110
|
156
156
|
requirements: []
|
157
157
|
rubyforge_project:
|
158
|
-
rubygems_version: 1.8.
|
158
|
+
rubygems_version: 1.8.25
|
159
159
|
signing_key:
|
160
160
|
specification_version: 3
|
161
161
|
summary: Set a DateTime via two accessors, one for the date, one for the time
|