mirror of
https://github.com/ditkrg/validates_timeliness.git
synced 2026-01-22 22:06:45 +00:00
moved restriction value evaluation into own method with recursive calls for Symbol and Proc in case they return string
This commit is contained in:
parent
3347a91856
commit
a666c35ccd
@ -108,6 +108,19 @@ module ValidatesTimeliness
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def timeliness_restriction_value(restriction, record, type)
|
||||
case restriction
|
||||
when Time, Date, DateTime
|
||||
restriction
|
||||
when Symbol
|
||||
timeliness_restriction_value(record.send(restriction), record, type)
|
||||
when Proc
|
||||
timeliness_restriction_value(restriction.call(record), record, type)
|
||||
else
|
||||
parse_date_time(restriction, type, false)
|
||||
end
|
||||
end
|
||||
|
||||
# Validate value against the temporal restrictions. Restriction values
|
||||
# maybe of mixed type, so they are evaluated as a common type, which may
|
||||
@ -128,16 +141,7 @@ module ValidatesTimeliness
|
||||
restriction_methods.each do |option, method|
|
||||
next unless restriction = configuration[option]
|
||||
begin
|
||||
compare = case restriction
|
||||
when Time, Date, DateTime
|
||||
restriction
|
||||
when Symbol
|
||||
record.send(restriction)
|
||||
when Proc
|
||||
restriction.call(record)
|
||||
else
|
||||
parse_date_time(restriction, configuration[:type], false)
|
||||
end
|
||||
compare = timeliness_restriction_value(restriction, record, configuration[:type])
|
||||
|
||||
next if compare.nil?
|
||||
|
||||
|
||||
@ -45,6 +45,38 @@ describe ValidatesTimeliness::Validations do
|
||||
ActiveRecord::Base.parse_date_time(*args)
|
||||
end
|
||||
end
|
||||
|
||||
describe "timeliness_restriction_value" do
|
||||
it "should return Time object when restriction is Time object" do
|
||||
restriction_value(Time.now, person, :datetime).should be_kind_of(Time)
|
||||
end
|
||||
|
||||
it "should return Time object when restriction is string" do
|
||||
restriction_value("2007-01-01 12:00", person, :datetime).should be_kind_of(Time)
|
||||
end
|
||||
|
||||
it "should return Time object when restriction is method symbol which returns Time object" do
|
||||
person.stub!(:datetime_attr).and_return(Time.now)
|
||||
restriction_value(:datetime_attr, person, :datetime).should be_kind_of(Time)
|
||||
end
|
||||
|
||||
it "should return Time object when restriction is method symbol which returns string" do
|
||||
person.stub!(:datetime_attr).and_return("2007-01-01 12:00")
|
||||
restriction_value(:datetime_attr, person, :datetime).should be_kind_of(Time)
|
||||
end
|
||||
|
||||
it "should return Time object when restriction is proc which returns Time object" do
|
||||
restriction_value(lambda { Time.now }, person, :datetime).should be_kind_of(Time)
|
||||
end
|
||||
|
||||
it "should return Time object when restriction is proc which returns string" do
|
||||
restriction_value(lambda {"2007-01-01 12:00"}, person, :datetime).should be_kind_of(Time)
|
||||
end
|
||||
|
||||
def restriction_value(*args)
|
||||
ActiveRecord::Base.send(:timeliness_restriction_value, *args)
|
||||
end
|
||||
end
|
||||
|
||||
describe "with no restrictions" do
|
||||
before :all do
|
||||
|
||||
Loading…
Reference in New Issue
Block a user