validates_timeliness 3.0.1 → 3.0.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.
- data/CHANGELOG.rdoc +4 -0
- data/README.rdoc +2 -1
- data/Rakefile +1 -1
- data/lib/validates_timeliness/extensions/date_time_select.rb +3 -4
- data/lib/validates_timeliness/extensions/multiparameter_handler.rb +49 -11
- data/lib/validates_timeliness/version.rb +1 -1
- data/spec/validates_timeliness/extensions/multiparameter_handler_spec.rb +22 -10
- data/validates_timeliness.gemspec +5 -5
- metadata +8 -8
data/CHANGELOG.rdoc
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
= 3.0.2 [2010-12-04]
|
2
|
+
* Fix AR multiparameter extension for Date columns
|
3
|
+
* Update to Timeliness 0.3.2 for zone abbreviation and offset support
|
4
|
+
|
1
5
|
= 3.0.1 [2010-11-02]
|
2
6
|
* Generate timeliness write methods in an included module to allow overriding in model class (josevalim)
|
3
7
|
|
data/README.rdoc
CHANGED
@@ -24,6 +24,7 @@ If you a looking for the old version for Rails 2.x go here[http://github.com/adz
|
|
24
24
|
|
25
25
|
* Supports I18n for the error messages
|
26
26
|
|
27
|
+
* Supports MRI 1.8.x and 1.9.x and Rubinius.
|
27
28
|
|
28
29
|
== Installation
|
29
30
|
|
@@ -34,7 +35,7 @@ As plugin (from master)
|
|
34
35
|
As gem
|
35
36
|
|
36
37
|
# in Gemfile
|
37
|
-
gem 'validates_timeliness', '~> 3.0.
|
38
|
+
gem 'validates_timeliness', '~> 3.0.2'
|
38
39
|
|
39
40
|
# Run bundler
|
40
41
|
$ bundle install
|
data/Rakefile
CHANGED
@@ -22,7 +22,7 @@ spec = Gem::Specification.new do |s|
|
|
22
22
|
s.homepage = "http://github.com/adzap/validates_timeliness"
|
23
23
|
s.require_path = 'lib'
|
24
24
|
s.files = %w(validates_timeliness.gemspec LICENSE CHANGELOG.rdoc README.rdoc Rakefile) + Dir.glob("{lib,spec}/**/*")
|
25
|
-
s.add_runtime_dependency 'timeliness', '~> 0.
|
25
|
+
s.add_runtime_dependency 'timeliness', '~> 0.3.2'
|
26
26
|
end
|
27
27
|
|
28
28
|
desc 'Default: run specs.'
|
@@ -10,7 +10,6 @@ module ValidatesTimeliness
|
|
10
10
|
|
11
11
|
included do
|
12
12
|
alias_method_chain :datetime_selector, :timeliness
|
13
|
-
alias_method_chain :value, :timeliness
|
14
13
|
end
|
15
14
|
|
16
15
|
module InstanceMethods
|
@@ -22,13 +21,13 @@ module ValidatesTimeliness
|
|
22
21
|
datetime_selector_without_timeliness(*args)
|
23
22
|
end
|
24
23
|
|
25
|
-
def
|
24
|
+
def value(object)
|
26
25
|
unless @timeliness_date_or_time_tag && @template_object.params[@object_name]
|
27
|
-
return
|
26
|
+
return super
|
28
27
|
end
|
29
28
|
|
30
29
|
pairs = @template_object.params[@object_name].select {|k,v| k =~ /^#{@method_name}\(/ }
|
31
|
-
return
|
30
|
+
return super if pairs.empty?
|
32
31
|
|
33
32
|
values = [nil] * 6
|
34
33
|
pairs.map do |(param, value)|
|
@@ -3,26 +3,64 @@ module ValidatesTimeliness
|
|
3
3
|
module MultiparameterHandler
|
4
4
|
extend ActiveSupport::Concern
|
5
5
|
|
6
|
+
# Stricter handling of date and time values from multiparameter
|
7
|
+
# assignment from the date/time select view helpers
|
8
|
+
|
6
9
|
included do
|
7
10
|
alias_method_chain :instantiate_time_object, :timeliness
|
11
|
+
alias_method_chain :execute_callstack_for_multiparameter_attributes, :timeliness
|
8
12
|
end
|
9
13
|
|
10
14
|
private
|
11
15
|
|
12
|
-
|
13
|
-
|
14
|
-
|
16
|
+
def invalid_multiparameter_date_or_time_as_string(values)
|
17
|
+
value = [values[0], *values[1..2].map {|s| s.to_s.rjust(2,"0")} ].join("-")
|
18
|
+
value += ' ' + values[3..5].map {|s| s.to_s.rjust(2, "0") }.join(":") unless values[3..5].empty?
|
19
|
+
value
|
20
|
+
end
|
21
|
+
|
15
22
|
def instantiate_time_object_with_timeliness(name, values)
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
23
|
+
if Date.valid_civil?(*values[0..2])
|
24
|
+
instantiate_time_object_without_timeliness(name, values)
|
25
|
+
else
|
26
|
+
invalid_multiparameter_date_or_time_as_string(values)
|
20
27
|
end
|
28
|
+
end
|
21
29
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
30
|
+
def instantiate_date_object(name, values)
|
31
|
+
values = values.map { |v| v.nil? ? 1 : v }
|
32
|
+
Date.new(*values)
|
33
|
+
rescue ArgumentError => ex
|
34
|
+
invalid_multiparameter_date_or_time_as_string(values)
|
35
|
+
end
|
36
|
+
|
37
|
+
def execute_callstack_for_multiparameter_attributes_with_timeliness(callstack)
|
38
|
+
errors = []
|
39
|
+
callstack.each do |name, values_with_empty_parameters|
|
40
|
+
begin
|
41
|
+
klass = (self.class.reflect_on_aggregation(name.to_sym) || column_for_attribute(name)).klass
|
42
|
+
values = values_with_empty_parameters.reject { |v| v.nil? }
|
43
|
+
|
44
|
+
if values.empty?
|
45
|
+
send(name + "=", nil)
|
46
|
+
else
|
47
|
+
|
48
|
+
value = if Time == klass
|
49
|
+
instantiate_time_object(name, values)
|
50
|
+
elsif Date == klass
|
51
|
+
instantiate_date_object(name, values_with_empty_parameters)
|
52
|
+
else
|
53
|
+
klass.new(*values)
|
54
|
+
end
|
55
|
+
|
56
|
+
send(name + "=", value)
|
57
|
+
end
|
58
|
+
rescue => ex
|
59
|
+
errors << ActiveRecord::AttributeAssignmentError.new("error on assignment #{values.inspect} to #{name}", ex, name)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
unless errors.empty?
|
63
|
+
raise ActiveRecord::MultiparameterAssignmentErrors.new(errors), "#{errors.size} error(s) on assignment of multiparameter attributes"
|
26
64
|
end
|
27
65
|
end
|
28
66
|
|
@@ -3,19 +3,31 @@ require 'spec_helper'
|
|
3
3
|
describe ValidatesTimeliness::Extensions::MultiparameterHandler do
|
4
4
|
let(:employee) { Employee.new }
|
5
5
|
|
6
|
-
|
7
|
-
|
6
|
+
context "time column" do
|
7
|
+
it 'should return string value for invalid date portion' do
|
8
|
+
multiparameter_attribute(:birth_datetime, [2000, 2, 31, 12, 0, 0])
|
9
|
+
employee.birth_datetime_before_type_cast.should == '2000-02-31 12:00:00'
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'should return Time value for valid datetimes' do
|
13
|
+
multiparameter_attribute(:birth_datetime, [2000, 2, 28, 12, 0, 0])
|
14
|
+
employee.birth_datetime_before_type_cast.should be_kind_of(Time)
|
15
|
+
end
|
8
16
|
end
|
9
17
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
18
|
+
context "date column" do
|
19
|
+
it 'should return string value for invalid date' do
|
20
|
+
multiparameter_attribute(:birth_date, [2000, 2, 31])
|
21
|
+
employee.birth_date_before_type_cast.should == '2000-02-31'
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'should return Date value for valid date' do
|
25
|
+
multiparameter_attribute(:birth_date, [2000, 2, 28])
|
26
|
+
employee.birth_date_before_type_cast.should be_kind_of(Date)
|
27
|
+
end
|
16
28
|
end
|
17
29
|
|
18
|
-
def
|
19
|
-
employee.send(:
|
30
|
+
def multiparameter_attribute(name, values)
|
31
|
+
employee.send(:execute_callstack_for_multiparameter_attributes, name.to_s => values)
|
20
32
|
end
|
21
33
|
end
|
@@ -2,11 +2,11 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{validates_timeliness}
|
5
|
-
s.version = "3.0.
|
5
|
+
s.version = "3.0.2"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["Adam Meehan"]
|
9
|
-
s.date = %q{2010-
|
9
|
+
s.date = %q{2010-12-04}
|
10
10
|
s.description = %q{Date and time validation plugin for Rails which allows custom formats}
|
11
11
|
s.email = %q{adam.meehan@gmail.com}
|
12
12
|
s.extra_rdoc_files = ["README.rdoc", "CHANGELOG.rdoc", "LICENSE"]
|
@@ -22,11 +22,11 @@ Gem::Specification.new do |s|
|
|
22
22
|
s.specification_version = 3
|
23
23
|
|
24
24
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
25
|
-
s.add_runtime_dependency(%q<timeliness>, ["~> 0.
|
25
|
+
s.add_runtime_dependency(%q<timeliness>, ["~> 0.3.2"])
|
26
26
|
else
|
27
|
-
s.add_dependency(%q<timeliness>, ["~> 0.
|
27
|
+
s.add_dependency(%q<timeliness>, ["~> 0.3.2"])
|
28
28
|
end
|
29
29
|
else
|
30
|
-
s.add_dependency(%q<timeliness>, ["~> 0.
|
30
|
+
s.add_dependency(%q<timeliness>, ["~> 0.3.2"])
|
31
31
|
end
|
32
32
|
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:
|
4
|
+
hash: 3
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 3
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 3.0.
|
9
|
+
- 2
|
10
|
+
version: 3.0.2
|
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: 2010-
|
18
|
+
date: 2010-12-04 00:00:00 +11:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -26,12 +26,12 @@ dependencies:
|
|
26
26
|
requirements:
|
27
27
|
- - ~>
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
hash:
|
29
|
+
hash: 23
|
30
30
|
segments:
|
31
31
|
- 0
|
32
|
-
-
|
33
|
-
-
|
34
|
-
version: 0.
|
32
|
+
- 3
|
33
|
+
- 2
|
34
|
+
version: 0.3.2
|
35
35
|
type: :runtime
|
36
36
|
version_requirements: *id001
|
37
37
|
description: Date and time validation plugin for Rails which allows custom formats
|