mirror of
https://github.com/ditkrg/validates_timeliness.git
synced 2026-01-25 15:22:58 +00:00
changed method to check type and compose string for specific type to properly validate
refactored specs
This commit is contained in:
@@ -1,33 +1,46 @@
|
||||
module ValidatesTimeliness
|
||||
module MultiparameterAttributes
|
||||
|
||||
def time_array_to_string(time_array)
|
||||
"%04d-%02d-%02d %02d:%02d:%02d" % time_array
|
||||
def self.included(base)
|
||||
base.alias_method_chain :execute_callstack_for_multiparameter_attributes, :timeliness
|
||||
end
|
||||
|
||||
def time_array_to_string(time_array, type)
|
||||
case type
|
||||
when :time
|
||||
"%02d:%02d:%02d" % time_array[3..5]
|
||||
when :date
|
||||
"%04d-%02d-%02d" % time_array[0..2]
|
||||
when :datetime
|
||||
"%04d-%02d-%02d %02d:%02d:%02d" % time_array
|
||||
end
|
||||
end
|
||||
|
||||
# Overrides AR method to store multiparameter time and dates as
|
||||
# ISO datetime string for later validation
|
||||
def execute_callstack_for_multiparameter_attributes(callstack)
|
||||
# Overrides AR method to store multiparameter time and dates as string
|
||||
# allowing validation later.
|
||||
def execute_callstack_for_multiparameter_attributes_with_timeliness(callstack)
|
||||
errors = []
|
||||
callstack.each do |name, values|
|
||||
klass = (self.class.reflect_on_aggregation(name.to_sym) || column_for_attribute(name)).klass
|
||||
if values.empty?
|
||||
send(name + "=", nil)
|
||||
else
|
||||
column = column_for_attribute(name)
|
||||
begin
|
||||
value = if Time == klass || Date == klass
|
||||
time_array_to_string(values)
|
||||
value = if [:date, :time, :datetime].include?(column.type)
|
||||
time_array_to_string(values, column.type)
|
||||
else
|
||||
klass.new(*values)
|
||||
klass.new(*values)
|
||||
end
|
||||
send("#{name}=", value)
|
||||
send(name + "=", value)
|
||||
rescue => ex
|
||||
errors << AttributeAssignmentError.new("error on assignment #{values.inspect} to #{name}", ex, name)
|
||||
errors << ActiveRecord::AttributeAssignmentError.new("error on assignment #{values.inspect} to #{name}", ex, name)
|
||||
end
|
||||
end
|
||||
end
|
||||
unless errors.empty?
|
||||
raise MultiparameterAssignmentErrors.new(errors), "#{errors.size} error(s) on assignment of multiparameter attributes"
|
||||
puts errors.inspect
|
||||
raise ActiveRecord::MultiparameterAssignmentErrors.new(errors), "#{errors.size} error(s) on assignment of multiparameter attributes"
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user