validates_timeliness 3.0.5 → 3.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/CHANGELOG.rdoc +4 -0
- data/README.rdoc +1 -1
- data/Rakefile +5 -46
- data/lib/validates_timeliness/attribute_methods.rb +10 -4
- data/lib/validates_timeliness/helper_methods.rb +1 -1
- data/lib/validates_timeliness/orm/active_record.rb +9 -0
- data/lib/validates_timeliness/orm/mongoid.rb +3 -10
- data/lib/validates_timeliness/validator.rb +9 -6
- data/lib/validates_timeliness/version.rb +1 -1
- data/spec/validates_timeliness/attribute_methods_spec.rb +0 -5
- data/spec/validates_timeliness/extensions/date_time_select_spec.rb +47 -74
- data/spec/validates_timeliness/orm/active_record_spec.rb +26 -4
- data/spec/validates_timeliness/orm/mongoid_spec.rb +19 -5
- data/spec/validates_timeliness/validator_spec.rb +8 -5
- data/validates_timeliness.gemspec +13 -25
- metadata +10 -10
data/CHANGELOG.rdoc
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
= 3.0.6 [2011-05-09]
|
2
|
+
* Fix for AR type conversion for date columns when using plugin parser.
|
3
|
+
* Add timeliness_type_cast_code for ORM specific type casting after parsing.
|
4
|
+
|
1
5
|
= 3.0.5 [2011-01-29]
|
2
6
|
* Fix for Conversion#parse when given nil value (closes issue #34)
|
3
7
|
|
data/README.rdoc
CHANGED
@@ -54,7 +54,7 @@ NOTE: You may wish to enable the plugin parser and the extensions to start. Plea
|
|
54
54
|
|
55
55
|
validates_datetime :occurred_at
|
56
56
|
|
57
|
-
validates_date :date_of_birth :before => lambda { 18.years.ago },
|
57
|
+
validates_date :date_of_birth, :before => lambda { 18.years.ago },
|
58
58
|
:before_message => "must be at least 18 years old"
|
59
59
|
|
60
60
|
validates_datetime :finish_time, :after => :start_time # Method symbol
|
data/Rakefile
CHANGED
@@ -1,36 +1,8 @@
|
|
1
|
-
require '
|
1
|
+
require 'bundler'
|
2
|
+
Bundler::GemHelper.install_tasks
|
3
|
+
|
2
4
|
require 'rake/rdoctask'
|
3
|
-
require 'rake/gempackagetask'
|
4
|
-
require 'rubygems/specification'
|
5
5
|
require 'rspec/core/rake_task'
|
6
|
-
require 'lib/validates_timeliness/version'
|
7
|
-
|
8
|
-
GEM_NAME = "validates_timeliness"
|
9
|
-
GEM_VERSION = ValidatesTimeliness::VERSION
|
10
|
-
|
11
|
-
spec = Gem::Specification.new do |s|
|
12
|
-
s.name = GEM_NAME
|
13
|
-
s.version = GEM_VERSION
|
14
|
-
s.platform = Gem::Platform::RUBY
|
15
|
-
s.summary = %q{Date and time validation plugin for Rails which allows custom formats}
|
16
|
-
s.description = s.summary
|
17
|
-
s.author = "Adam Meehan"
|
18
|
-
s.email = "adam.meehan@gmail.com"
|
19
|
-
s.homepage = "http://github.com/adzap/validates_timeliness"
|
20
|
-
s.require_path = 'lib'
|
21
|
-
|
22
|
-
s.add_runtime_dependency 'timeliness', '~> 0.3.2'
|
23
|
-
|
24
|
-
s.files = `git ls-files`.split("\n") - %w{ .rspec .gitignore autotest/discover.rb Gemfile Gemfile.lock }
|
25
|
-
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
26
|
-
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
27
|
-
|
28
|
-
s.has_rdoc = true
|
29
|
-
s.extra_rdoc_files = ["README.rdoc", "CHANGELOG.rdoc", "LICENSE"]
|
30
|
-
end
|
31
|
-
|
32
|
-
desc 'Default: run specs.'
|
33
|
-
task :default => :spec
|
34
6
|
|
35
7
|
desc "Run specs"
|
36
8
|
RSpec::Core::RakeTask.new(:spec)
|
@@ -50,18 +22,5 @@ Rake::RDocTask.new(:rdoc) do |rdoc|
|
|
50
22
|
rdoc.rdoc_files.include('lib/**/*.rb')
|
51
23
|
end
|
52
24
|
|
53
|
-
|
54
|
-
|
55
|
-
end
|
56
|
-
|
57
|
-
desc "Install the gem locally"
|
58
|
-
task :install => [:package] do
|
59
|
-
sh %{gem install pkg/#{GEM_NAME}-#{GEM_VERSION}}
|
60
|
-
end
|
61
|
-
|
62
|
-
desc "Create a gemspec file"
|
63
|
-
task :make_spec do
|
64
|
-
File.open("#{GEM_NAME}.gemspec", "w") do |file|
|
65
|
-
file.puts spec.to_ruby
|
66
|
-
end
|
67
|
-
end
|
25
|
+
desc 'Default: run specs.'
|
26
|
+
task :default => :spec
|
@@ -31,14 +31,12 @@ module ValidatesTimeliness
|
|
31
31
|
end
|
32
32
|
|
33
33
|
def define_timeliness_write_method(attr_name)
|
34
|
-
type = timeliness_attribute_type(attr_name)
|
35
|
-
timezone_aware = timeliness_attribute_timezone_aware?(attr_name)
|
36
|
-
|
37
34
|
method_body, line = <<-EOV, __LINE__ + 1
|
38
35
|
def #{attr_name}=(value)
|
39
36
|
@timeliness_cache ||= {}
|
40
37
|
@timeliness_cache["#{attr_name}"] = value
|
41
|
-
|
38
|
+
|
39
|
+
#{ "if value.is_a?(String)\n#{timeliness_type_cast_code(attr_name, 'value')}\nend" if ValidatesTimeliness.use_plugin_parser }
|
42
40
|
super
|
43
41
|
end
|
44
42
|
EOV
|
@@ -54,6 +52,14 @@ module ValidatesTimeliness
|
|
54
52
|
generated_timeliness_methods.module_eval(method_body, __FILE__, line)
|
55
53
|
end
|
56
54
|
|
55
|
+
def timeliness_type_cast_code(attr_name, var_name)
|
56
|
+
type = timeliness_attribute_type(attr_name)
|
57
|
+
timezone_aware = timeliness_attribute_timezone_aware?(attr_name)
|
58
|
+
timezone = :current if timezone_aware
|
59
|
+
|
60
|
+
"#{var_name} = Timeliness::Parser.parse(#{var_name}, :#{type}, :zone => #{timezone.inspect})"
|
61
|
+
end
|
62
|
+
|
57
63
|
def generated_timeliness_methods
|
58
64
|
@generated_timeliness_methods ||= Module.new.tap { |m| include(m) }
|
59
65
|
end
|
@@ -20,7 +20,7 @@ module ActiveModel
|
|
20
20
|
self.timeliness_validated_attributes ||= []
|
21
21
|
self.timeliness_validated_attributes += (attr_names - self.timeliness_validated_attributes)
|
22
22
|
end
|
23
|
-
validates_with
|
23
|
+
validates_with TimelinessValidator, options
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
@@ -18,6 +18,15 @@ module ValidatesTimeliness
|
|
18
18
|
def timeliness_attribute_type(attr_name)
|
19
19
|
columns_hash[attr_name.to_s].type
|
20
20
|
end
|
21
|
+
|
22
|
+
def timeliness_type_cast_code(attr_name, var_name)
|
23
|
+
type = timeliness_attribute_type(attr_name)
|
24
|
+
|
25
|
+
<<-END
|
26
|
+
#{super}
|
27
|
+
#{var_name} = #{var_name}.to_date if #{var_name} && :#{type} == :date
|
28
|
+
END
|
29
|
+
end
|
21
30
|
end
|
22
31
|
|
23
32
|
module InstanceMethods
|
@@ -16,17 +16,10 @@ module ValidatesTimeliness
|
|
16
16
|
attr_names.each { |attr_name| define_timeliness_write_method(attr_name) }
|
17
17
|
end
|
18
18
|
|
19
|
-
def
|
19
|
+
def timeliness_type_cast_code(attr_name, var_name)
|
20
20
|
type = timeliness_attribute_type(attr_name)
|
21
|
-
|
22
|
-
|
23
|
-
@timeliness_cache ||= {}
|
24
|
-
@timeliness_cache["#{attr_name}"] = value
|
25
|
-
#{ "value = Timeliness::Parser.parse(value, :#{type}) if value.is_a?(String)" if ValidatesTimeliness.use_plugin_parser }
|
26
|
-
write_attribute(:#{attr_name}, value)
|
27
|
-
end
|
28
|
-
EOV
|
29
|
-
class_eval(method_body, __FILE__, line)
|
21
|
+
|
22
|
+
"#{var_name} = Timeliness::Parser.parse(value, :#{type})"
|
30
23
|
end
|
31
24
|
|
32
25
|
def timeliness_attribute_type(attr_name)
|
@@ -20,9 +20,7 @@ module ValidatesTimeliness
|
|
20
20
|
:datetime => '%Y-%m-%d %H:%M:%S'
|
21
21
|
}.freeze
|
22
22
|
|
23
|
-
|
24
|
-
:timeliness
|
25
|
-
end
|
23
|
+
RESTRICTION_ERROR_MESSAGE = "Error occurred validating %s for %s restriction:\n%s"
|
26
24
|
|
27
25
|
def initialize(options)
|
28
26
|
@type = options.delete(:type) || :datetime
|
@@ -45,17 +43,22 @@ module ValidatesTimeliness
|
|
45
43
|
value = parse(raw_value) if value.is_a?(String) || options[:format]
|
46
44
|
value = type_cast_value(value, @type)
|
47
45
|
|
48
|
-
|
46
|
+
add_error(record, attr_name, :"invalid_#{@type}") and return if value.blank?
|
47
|
+
|
48
|
+
validate_restrictions(record, attr_name, value)
|
49
|
+
end
|
49
50
|
|
51
|
+
def validate_restrictions(record, attr_name, value)
|
50
52
|
@restrictions_to_check.each do |restriction|
|
51
53
|
begin
|
52
54
|
restriction_value = type_cast_value(evaluate_option_value(options[restriction], record), @type)
|
53
55
|
unless value.send(RESTRICTIONS[restriction], restriction_value)
|
54
|
-
|
56
|
+
add_error(record, attr_name, restriction, restriction_value) and break
|
55
57
|
end
|
56
58
|
rescue => e
|
57
59
|
unless ValidatesTimeliness.ignore_restriction_errors
|
58
|
-
|
60
|
+
message = RESTRICTION_ERROR_MESSAGE % [ attr_name, restriction.inspect, e.message ]
|
61
|
+
add_error(record, attr_name, message) and break
|
59
62
|
end
|
60
63
|
end
|
61
64
|
end
|
@@ -60,11 +60,6 @@ describe ValidatesTimeliness::AttributeMethods do
|
|
60
60
|
r.birth_date = '2010-01-01'
|
61
61
|
end
|
62
62
|
|
63
|
-
it 'should parse string as current timezone' do
|
64
|
-
r = PersonWithParser.new
|
65
|
-
r.birth_datetime = '2010-01-01 12:00'
|
66
|
-
r.birth_datetime.zone == Time.zone.name
|
67
|
-
end
|
68
63
|
end
|
69
64
|
end
|
70
65
|
|
@@ -13,7 +13,7 @@ describe ValidatesTimeliness::Extensions::DateTimeSelect do
|
|
13
13
|
|
14
14
|
describe "datetime_select" do
|
15
15
|
it "should use param values when attribute is nil" do
|
16
|
-
params["person"] = {
|
16
|
+
@params["person"] = {
|
17
17
|
"birth_datetime(1i)" => 2009,
|
18
18
|
"birth_datetime(2i)" => 2,
|
19
19
|
"birth_datetime(3i)" => 29,
|
@@ -22,17 +22,12 @@ describe ValidatesTimeliness::Extensions::DateTimeSelect do
|
|
22
22
|
"birth_datetime(6i)" => 14,
|
23
23
|
}
|
24
24
|
person.birth_datetime = nil
|
25
|
-
output = datetime_select(:person, :birth_datetime, :include_blank => true, :include_seconds => true)
|
26
|
-
|
27
|
-
output.should have_tag('select[id=person_birth_datetime_2i] option[selected=selected]', 'February')
|
28
|
-
output.should have_tag('select[id=person_birth_datetime_3i] option[selected=selected]', '29')
|
29
|
-
output.should have_tag('select[id=person_birth_datetime_4i] option[selected=selected]', '12')
|
30
|
-
output.should have_tag('select[id=person_birth_datetime_5i] option[selected=selected]', '13')
|
31
|
-
output.should have_tag('select[id=person_birth_datetime_6i] option[selected=selected]', '14')
|
25
|
+
@output = datetime_select(:person, :birth_datetime, :include_blank => true, :include_seconds => true)
|
26
|
+
should_have_datetime_selected(:birth_datetime, :year => 2009, :month => 'February', :day => 29, :hour => 12, :min => 13, :sec => 14)
|
32
27
|
end
|
33
28
|
|
34
29
|
it "should override object values and use params if present" do
|
35
|
-
params["person"] = {
|
30
|
+
@params["person"] = {
|
36
31
|
"birth_datetime(1i)" => 2009,
|
37
32
|
"birth_datetime(2i)" => 2,
|
38
33
|
"birth_datetime(3i)" => 29,
|
@@ -41,100 +36,70 @@ describe ValidatesTimeliness::Extensions::DateTimeSelect do
|
|
41
36
|
"birth_datetime(6i)" => 14,
|
42
37
|
}
|
43
38
|
person.birth_datetime = "2010-01-01 15:16:17"
|
44
|
-
output = datetime_select(:person, :birth_datetime, :include_blank => true, :include_seconds => true)
|
45
|
-
|
46
|
-
output.should have_tag('select[id=person_birth_datetime_2i] option[selected=selected]', 'February')
|
47
|
-
output.should have_tag('select[id=person_birth_datetime_3i] option[selected=selected]', '29')
|
48
|
-
output.should have_tag('select[id=person_birth_datetime_4i] option[selected=selected]', '12')
|
49
|
-
output.should have_tag('select[id=person_birth_datetime_5i] option[selected=selected]', '13')
|
50
|
-
output.should have_tag('select[id=person_birth_datetime_6i] option[selected=selected]', '14')
|
39
|
+
@output = datetime_select(:person, :birth_datetime, :include_blank => true, :include_seconds => true)
|
40
|
+
should_have_datetime_selected(:birth_datetime, :year => 2009, :month => 'February', :day => 29, :hour => 12, :min => 13, :sec => 14)
|
51
41
|
end
|
52
42
|
|
53
43
|
it "should use attribute values from object if no params" do
|
54
44
|
person.birth_datetime = "2009-01-02 12:13:14"
|
55
|
-
output = datetime_select(:person, :birth_datetime, :include_blank => true, :include_seconds => true)
|
56
|
-
|
57
|
-
output.should have_tag('select[id=person_birth_datetime_2i] option[selected=selected]', 'January')
|
58
|
-
output.should have_tag('select[id=person_birth_datetime_3i] option[selected=selected]', '2')
|
59
|
-
output.should have_tag('select[id=person_birth_datetime_4i] option[selected=selected]', '12')
|
60
|
-
output.should have_tag('select[id=person_birth_datetime_5i] option[selected=selected]', '13')
|
61
|
-
output.should have_tag('select[id=person_birth_datetime_6i] option[selected=selected]', '14')
|
45
|
+
@output = datetime_select(:person, :birth_datetime, :include_blank => true, :include_seconds => true)
|
46
|
+
should_have_datetime_selected(:birth_datetime, :year => 2009, :month => 'January', :day => 2, :hour => 12, :min => 13, :sec => 14)
|
62
47
|
end
|
63
48
|
|
64
49
|
it "should use attribute values if params does not contain attribute params" do
|
65
50
|
person.birth_datetime = "2009-01-02 12:13:14"
|
66
|
-
params["person"] = { }
|
67
|
-
output = datetime_select(:person, :birth_datetime, :include_blank => true, :include_seconds => true)
|
68
|
-
|
69
|
-
output.should have_tag('select[id=person_birth_datetime_2i] option[selected=selected]', 'January')
|
70
|
-
output.should have_tag('select[id=person_birth_datetime_3i] option[selected=selected]', '2')
|
71
|
-
output.should have_tag('select[id=person_birth_datetime_4i] option[selected=selected]', '12')
|
72
|
-
output.should have_tag('select[id=person_birth_datetime_5i] option[selected=selected]', '13')
|
73
|
-
output.should have_tag('select[id=person_birth_datetime_6i] option[selected=selected]', '14')
|
51
|
+
@params["person"] = { }
|
52
|
+
@output = datetime_select(:person, :birth_datetime, :include_blank => true, :include_seconds => true)
|
53
|
+
should_have_datetime_selected(:birth_datetime, :year => 2009, :month => 'January', :day => 2, :hour => 12, :min => 13, :sec => 14)
|
74
54
|
end
|
75
55
|
|
76
56
|
it "should not select values when attribute value is nil and has no param values" do
|
77
57
|
person.birth_datetime = nil
|
78
|
-
output = datetime_select(:person, :birth_datetime, :include_blank => true, :include_seconds => true)
|
79
|
-
|
80
|
-
output.should_not have_tag('select[id=person_birth_datetime_2i] option[selected=selected]')
|
81
|
-
output.should_not have_tag('select[id=person_birth_datetime_3i] option[selected=selected]')
|
82
|
-
output.should_not have_tag('select[id=person_birth_datetime_4i] option[selected=selected]')
|
83
|
-
output.should_not have_tag('select[id=person_birth_datetime_5i] option[selected=selected]')
|
84
|
-
output.should_not have_tag('select[id=person_birth_datetime_6i] option[selected=selected]')
|
58
|
+
@output = datetime_select(:person, :birth_datetime, :include_blank => true, :include_seconds => true)
|
59
|
+
should_not_have_datetime_selected(:birth_datetime, :year, :month, :day, :hour, :min, :sec)
|
85
60
|
end
|
86
61
|
end
|
87
62
|
|
88
63
|
describe "date_select" do
|
89
64
|
it "should use param values when attribute is nil" do
|
90
|
-
params["person"] = {
|
65
|
+
@params["person"] = {
|
91
66
|
"birth_date(1i)" => 2009,
|
92
67
|
"birth_date(2i)" => 2,
|
93
68
|
"birth_date(3i)" => 29,
|
94
69
|
}
|
95
70
|
person.birth_date = nil
|
96
|
-
output = date_select(:person, :birth_date, :include_blank => true, :include_seconds => true)
|
97
|
-
|
98
|
-
output.should have_tag('select[id=person_birth_date_2i] option[selected=selected]', 'February')
|
99
|
-
output.should have_tag('select[id=person_birth_date_3i] option[selected=selected]', '29')
|
71
|
+
@output = date_select(:person, :birth_date, :include_blank => true, :include_seconds => true)
|
72
|
+
should_have_datetime_selected(:birth_date, :year => 2009, :month => 'February', :day => 29)
|
100
73
|
end
|
101
74
|
|
102
75
|
it "should override object values and use params if present" do
|
103
|
-
params["person"] = {
|
76
|
+
@params["person"] = {
|
104
77
|
"birth_date(1i)" => 2009,
|
105
78
|
"birth_date(2i)" => 2,
|
106
79
|
"birth_date(3i)" => 29,
|
107
80
|
}
|
108
81
|
person.birth_date = "2009-03-01"
|
109
|
-
output = date_select(:person, :birth_date, :include_blank => true, :include_seconds => true)
|
110
|
-
|
111
|
-
output.should have_tag('select[id=person_birth_date_2i] option[selected=selected]', 'February')
|
112
|
-
output.should have_tag('select[id=person_birth_date_3i] option[selected=selected]', '29')
|
82
|
+
@output = date_select(:person, :birth_date, :include_blank => true, :include_seconds => true)
|
83
|
+
should_have_datetime_selected(:birth_date, :year => 2009, :month => 'February', :day => 29)
|
113
84
|
end
|
114
85
|
|
115
86
|
it "should select attribute values from object if no params" do
|
116
87
|
person.birth_date = "2009-01-02"
|
117
|
-
output = date_select(:person, :birth_date, :include_blank => true, :include_seconds => true)
|
118
|
-
|
119
|
-
output.should have_tag('select[id=person_birth_date_2i] option[selected=selected]', 'January')
|
120
|
-
output.should have_tag('select[id=person_birth_date_3i] option[selected=selected]', '2')
|
88
|
+
@output = date_select(:person, :birth_date, :include_blank => true, :include_seconds => true)
|
89
|
+
should_have_datetime_selected(:birth_date, :year => 2009, :month => 'January', :day => 2)
|
121
90
|
end
|
122
91
|
|
123
92
|
it "should select attribute values if params does not contain attribute params" do
|
124
93
|
person.birth_date = "2009-01-02"
|
125
|
-
params["person"] = { }
|
126
|
-
output = date_select(:person, :birth_date, :include_blank => true, :include_seconds => true)
|
127
|
-
|
128
|
-
output.should have_tag('select[id=person_birth_date_2i] option[selected=selected]', 'January')
|
129
|
-
output.should have_tag('select[id=person_birth_date_3i] option[selected=selected]', '2')
|
94
|
+
@params["person"] = { }
|
95
|
+
@output = date_select(:person, :birth_date, :include_blank => true, :include_seconds => true)
|
96
|
+
should_have_datetime_selected(:birth_date, :year => 2009, :month => 'January', :day => 2)
|
130
97
|
end
|
131
98
|
|
132
99
|
it "should not select values when attribute value is nil and has no param values" do
|
133
100
|
person.birth_date = nil
|
134
|
-
output = date_select(:person, :birth_date, :include_blank => true, :include_seconds => true)
|
135
|
-
|
136
|
-
output.should_not have_tag('select[id=person_birth_date_2i] option[selected=selected]')
|
137
|
-
output.should_not have_tag('select[id=person_birth_date_3i] option[selected=selected]')
|
101
|
+
@output = date_select(:person, :birth_date, :include_blank => true, :include_seconds => true)
|
102
|
+
should_not_have_datetime_selected(:birth_time, :year, :month, :day)
|
138
103
|
end
|
139
104
|
end
|
140
105
|
|
@@ -144,7 +109,7 @@ describe ValidatesTimeliness::Extensions::DateTimeSelect do
|
|
144
109
|
end
|
145
110
|
|
146
111
|
it "should use param values when attribute is nil" do
|
147
|
-
params["person"] = {
|
112
|
+
@params["person"] = {
|
148
113
|
"birth_time(1i)" => 2000,
|
149
114
|
"birth_time(2i)" => 1,
|
150
115
|
"birth_time(3i)" => 1,
|
@@ -153,26 +118,34 @@ describe ValidatesTimeliness::Extensions::DateTimeSelect do
|
|
153
118
|
"birth_time(6i)" => 14,
|
154
119
|
}
|
155
120
|
person.birth_time = nil
|
156
|
-
output = time_select(:person, :birth_time, :include_blank => true, :include_seconds => true)
|
157
|
-
|
158
|
-
output.should have_tag('select[id=person_birth_time_5i] option[selected=selected]', '13')
|
159
|
-
output.should have_tag('select[id=person_birth_time_6i] option[selected=selected]', '14')
|
121
|
+
@output = time_select(:person, :birth_time, :include_blank => true, :include_seconds => true)
|
122
|
+
should_have_datetime_selected(:birth_time, :hour => 12, :min => 13, :sec => 14)
|
160
123
|
end
|
161
124
|
|
162
125
|
it "should select attribute values from object if no params" do
|
163
126
|
person.birth_time = "2000-01-01 12:13:14"
|
164
|
-
output = time_select(:person, :birth_time, :include_blank => true, :include_seconds => true)
|
165
|
-
|
166
|
-
output.should have_tag('select[id=person_birth_time_5i] option[selected=selected]', '13')
|
167
|
-
output.should have_tag('select[id=person_birth_time_6i] option[selected=selected]', '14')
|
127
|
+
@output = time_select(:person, :birth_time, :include_blank => true, :include_seconds => true)
|
128
|
+
should_have_datetime_selected(:birth_time, :hour => 12, :min => 13, :sec => 14)
|
168
129
|
end
|
169
130
|
|
170
131
|
it "should not select values when attribute value is nil and has no param values" do
|
171
132
|
person.birth_time = nil
|
172
|
-
output = time_select(:person, :birth_time, :include_blank => true, :include_seconds => true)
|
173
|
-
|
174
|
-
|
175
|
-
|
133
|
+
@output = time_select(:person, :birth_time, :include_blank => true, :include_seconds => true)
|
134
|
+
should_not_have_datetime_selected(:birth_time, :hour, :min, :sec)
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
def should_have_datetime_selected(field, datetime_hash)
|
139
|
+
datetime_hash.each do |key, value|
|
140
|
+
index = {:year => 1, :month => 2, :day => 3, :hour => 4, :min => 5, :sec => 6}[key]
|
141
|
+
@output.should have_tag("select[id=person_#{field}_#{index}i] option[selected=selected]", value.to_s)
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
def should_not_have_datetime_selected(field, *attributes)
|
146
|
+
attributes.each do |attribute|
|
147
|
+
index = {:year => 1, :month => 2, :day => 3, :hour => 4, :min => 5, :sec => 6}[attribute]
|
148
|
+
@output.should_not have_tag("select[id=person_#{attribute}_#{index}i] option[selected=selected]")
|
176
149
|
end
|
177
150
|
end
|
178
151
|
end
|
@@ -47,10 +47,32 @@ describe ValidatesTimeliness, 'ActiveRecord' do
|
|
47
47
|
r.birth_date = '2010-01-01'
|
48
48
|
end
|
49
49
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
50
|
+
context "for a date column" do
|
51
|
+
it 'should store a date value after parsing string' do
|
52
|
+
r = EmployeeWithParser.new
|
53
|
+
r.birth_date = '2010-01-01'
|
54
|
+
|
55
|
+
r.birth_date.should be_kind_of(Date)
|
56
|
+
r.birth_date.should == Date.new(2010, 1, 1)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
context "for a datetime column" do
|
61
|
+
with_config(:default_timezone, 'Australia/Melbourne')
|
62
|
+
|
63
|
+
it 'should parse string into Time value' do
|
64
|
+
r = EmployeeWithParser.new
|
65
|
+
r.birth_datetime = '2010-01-01 12:00'
|
66
|
+
|
67
|
+
r.birth_datetime.should be_kind_of(Time)
|
68
|
+
end
|
69
|
+
|
70
|
+
it 'should parse string as current timezone' do
|
71
|
+
r = EmployeeWithParser.new
|
72
|
+
r.birth_datetime = '2010-06-01 12:00'
|
73
|
+
|
74
|
+
r.birth_datetime.utc_offset.should == Time.zone.utc_offset
|
75
|
+
end
|
54
76
|
end
|
55
77
|
end
|
56
78
|
end
|
@@ -60,10 +60,24 @@ describe ValidatesTimeliness, 'Mongoid' do
|
|
60
60
|
r.publish_date = '2010-01-01'
|
61
61
|
end
|
62
62
|
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
63
|
+
context "for a date column" do
|
64
|
+
it 'should store a date value after parsing string' do
|
65
|
+
r = Article.new
|
66
|
+
r.publish_date = '2010-01-01'
|
67
|
+
|
68
|
+
r.publish_date.should be_kind_of(Date)
|
69
|
+
r.publish_date.should == Date.new(2010, 1, 1)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
context "for a datetime column" do
|
74
|
+
it 'should parse string into Time value' do
|
75
|
+
r = Article.new
|
76
|
+
r.publish_datetime = '2010-01-01 12:00'
|
77
|
+
|
78
|
+
r.publish_datetime.should be_kind_of(Time)
|
79
|
+
r.publish_datetime.should == Time.utc(2010,1,1,12,0)
|
80
|
+
end
|
67
81
|
end
|
68
82
|
end
|
69
83
|
end
|
@@ -79,7 +93,7 @@ describe ValidatesTimeliness, 'Mongoid' do
|
|
79
93
|
|
80
94
|
context "before_type_cast method" do
|
81
95
|
it 'should not be defined if ORM does not support it' do
|
82
|
-
Article.new.should_not respond_to(:
|
96
|
+
Article.new.should_not respond_to(:publish_datetime_before_type_cast)
|
83
97
|
end
|
84
98
|
end
|
85
99
|
end
|
@@ -7,10 +7,6 @@ describe ValidatesTimeliness::Validator do
|
|
7
7
|
Timecop.freeze(Time.local_time(2010, 1, 1, 0, 0, 0))
|
8
8
|
end
|
9
9
|
|
10
|
-
it 'should return validator kind as :timeliness' do
|
11
|
-
ValidatesTimeliness::Validator.kind.should == :timeliness
|
12
|
-
end
|
13
|
-
|
14
10
|
describe "Model.validates with :timeliness option" do
|
15
11
|
it 'should use plugin validator class' do
|
16
12
|
Person.validates :birth_date, :timeliness => {:is_at => Date.new(2010,1,1), :type => :date}
|
@@ -136,7 +132,7 @@ describe ValidatesTimeliness::Validator do
|
|
136
132
|
let(:person) { Person.new(:birth_date => Date.today) }
|
137
133
|
|
138
134
|
before do
|
139
|
-
Person.validates_time :birth_date, :is_at => lambda { raise }
|
135
|
+
Person.validates_time :birth_date, :is_at => lambda { raise }, :before => lambda { raise }
|
140
136
|
end
|
141
137
|
|
142
138
|
it "should be added when ignore_restriction_errors is false" do
|
@@ -152,6 +148,13 @@ describe ValidatesTimeliness::Validator do
|
|
152
148
|
person.errors[:birth_date].should be_empty
|
153
149
|
end
|
154
150
|
end
|
151
|
+
|
152
|
+
it 'should exit on first error' do
|
153
|
+
with_config(:ignore_restriction_errors, false) do
|
154
|
+
person.valid?
|
155
|
+
person.errors[:birth_date].should have(1).items
|
156
|
+
end
|
157
|
+
end
|
155
158
|
end
|
156
159
|
|
157
160
|
describe "#format_error_value" do
|
@@ -1,32 +1,20 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "validates_timeliness/version"
|
2
4
|
|
3
5
|
Gem::Specification.new do |s|
|
4
|
-
s.name
|
5
|
-
s.version
|
6
|
+
s.name = "validates_timeliness"
|
7
|
+
s.version = ValidatesTimeliness::VERSION
|
8
|
+
s.authors = ["Adam Meehan"]
|
9
|
+
s.summary = %q{Date and time validation plugin for Rails which allows custom formats}
|
10
|
+
s.description = %q{Adds validation methods to ActiveModel for validating dates and times. Works with multiple ORMS.}
|
11
|
+
s.email = %q{adam.meehan@gmail.com}
|
12
|
+
s.homepage = %q{http://github.com/adzap/validates_timeliness}
|
6
13
|
|
7
|
-
s.
|
8
|
-
s.
|
9
|
-
s.
|
10
|
-
s.description = %q{Date and time validation plugin for Rails which allows custom formats}
|
11
|
-
s.email = %q{adam.meehan@gmail.com}
|
14
|
+
s.require_paths = ["lib"]
|
15
|
+
s.files = `git ls-files`.split("\n") - %w{ .gitignore .rspec Gemfile Gemfile.lock autotest/discover.rb }
|
16
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
12
17
|
s.extra_rdoc_files = ["README.rdoc", "CHANGELOG.rdoc", "LICENSE"]
|
13
|
-
s.files = ["CHANGELOG.rdoc", "LICENSE", "README.rdoc", "Rakefile", "init.rb", "lib/generators/validates_timeliness/install_generator.rb", "lib/generators/validates_timeliness/templates/en.yml", "lib/generators/validates_timeliness/templates/validates_timeliness.rb", "lib/validates_timeliness.rb", "lib/validates_timeliness/attribute_methods.rb", "lib/validates_timeliness/conversion.rb", "lib/validates_timeliness/extensions.rb", "lib/validates_timeliness/extensions/date_time_select.rb", "lib/validates_timeliness/extensions/multiparameter_handler.rb", "lib/validates_timeliness/helper_methods.rb", "lib/validates_timeliness/orm/active_record.rb", "lib/validates_timeliness/orm/mongoid.rb", "lib/validates_timeliness/railtie.rb", "lib/validates_timeliness/validator.rb", "lib/validates_timeliness/version.rb", "spec/spec_helper.rb", "spec/support/config_helper.rb", "spec/support/model_helpers.rb", "spec/support/test_model.rb", "spec/validates_timeliness/attribute_methods_spec.rb", "spec/validates_timeliness/conversion_spec.rb", "spec/validates_timeliness/extensions/date_time_select_spec.rb", "spec/validates_timeliness/extensions/multiparameter_handler_spec.rb", "spec/validates_timeliness/helper_methods_spec.rb", "spec/validates_timeliness/orm/active_record_spec.rb", "spec/validates_timeliness/orm/mongoid_spec.rb", "spec/validates_timeliness/validator/after_spec.rb", "spec/validates_timeliness/validator/before_spec.rb", "spec/validates_timeliness/validator/is_at_spec.rb", "spec/validates_timeliness/validator/on_or_after_spec.rb", "spec/validates_timeliness/validator/on_or_before_spec.rb", "spec/validates_timeliness/validator_spec.rb", "spec/validates_timeliness_spec.rb", "validates_timeliness.gemspec"]
|
14
|
-
s.homepage = %q{http://github.com/adzap/validates_timeliness}
|
15
|
-
s.require_paths = ["lib"]
|
16
|
-
s.rubygems_version = %q{1.3.7}
|
17
|
-
s.summary = %q{Date and time validation plugin for Rails which allows custom formats}
|
18
|
-
s.test_files = ["spec/spec_helper.rb", "spec/support/config_helper.rb", "spec/support/model_helpers.rb", "spec/support/test_model.rb", "spec/validates_timeliness/attribute_methods_spec.rb", "spec/validates_timeliness/conversion_spec.rb", "spec/validates_timeliness/extensions/date_time_select_spec.rb", "spec/validates_timeliness/extensions/multiparameter_handler_spec.rb", "spec/validates_timeliness/helper_methods_spec.rb", "spec/validates_timeliness/orm/active_record_spec.rb", "spec/validates_timeliness/orm/mongoid_spec.rb", "spec/validates_timeliness/validator/after_spec.rb", "spec/validates_timeliness/validator/before_spec.rb", "spec/validates_timeliness/validator/is_at_spec.rb", "spec/validates_timeliness/validator/on_or_after_spec.rb", "spec/validates_timeliness/validator/on_or_before_spec.rb", "spec/validates_timeliness/validator_spec.rb", "spec/validates_timeliness_spec.rb"]
|
19
18
|
|
20
|
-
|
21
|
-
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
22
|
-
s.specification_version = 3
|
23
|
-
|
24
|
-
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
25
|
-
s.add_runtime_dependency(%q<timeliness>, ["~> 0.3.2"])
|
26
|
-
else
|
27
|
-
s.add_dependency(%q<timeliness>, ["~> 0.3.2"])
|
28
|
-
end
|
29
|
-
else
|
30
|
-
s.add_dependency(%q<timeliness>, ["~> 0.3.2"])
|
31
|
-
end
|
19
|
+
s.add_runtime_dependency(%q<timeliness>, ["~> 0.3.3"])
|
32
20
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: validates_timeliness
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
5
|
-
prerelease:
|
4
|
+
hash: 11
|
5
|
+
prerelease:
|
6
6
|
segments:
|
7
7
|
- 3
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 3.0.
|
9
|
+
- 6
|
10
|
+
version: 3.0.6
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Adam Meehan
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-
|
18
|
+
date: 2011-05-09 00:00:00 +10:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -26,15 +26,15 @@ dependencies:
|
|
26
26
|
requirements:
|
27
27
|
- - ~>
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
hash:
|
29
|
+
hash: 21
|
30
30
|
segments:
|
31
31
|
- 0
|
32
32
|
- 3
|
33
|
-
-
|
34
|
-
version: 0.3.
|
33
|
+
- 3
|
34
|
+
version: 0.3.3
|
35
35
|
type: :runtime
|
36
36
|
version_requirements: *id001
|
37
|
-
description:
|
37
|
+
description: Adds validation methods to ActiveModel for validating dates and times. Works with multiple ORMS.
|
38
38
|
email: adam.meehan@gmail.com
|
39
39
|
executables: []
|
40
40
|
|
@@ -114,7 +114,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
114
114
|
requirements: []
|
115
115
|
|
116
116
|
rubyforge_project:
|
117
|
-
rubygems_version: 1.
|
117
|
+
rubygems_version: 1.5.2
|
118
118
|
signing_key:
|
119
119
|
specification_version: 3
|
120
120
|
summary: Date and time validation plugin for Rails which allows custom formats
|