validates_timeliness 3.0.1 → 3.0.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|