properly chain multiparameter attributes

This commit is contained in:
Adam Meehan 2009-03-26 15:13:35 +11:00
parent 11e643c0fe
commit 4f0c81b6f8

View File

@ -16,18 +16,16 @@ module ValidatesTimeliness
def execute_callstack_for_multiparameter_attributes_with_timeliness(callstack) def execute_callstack_for_multiparameter_attributes_with_timeliness(callstack)
errors = [] errors = []
callstack.each do |name, values| callstack.each do |name, values|
klass = (self.class.reflect_on_aggregation(name.to_sym) || column_for_attribute(name)).klass column = column_for_attribute(name)
if values.empty? if column && [:date, :time, :datetime].include?(column.type)
send(name + "=", nil)
else
column = column_for_attribute(name)
begin begin
value = if [:date, :time, :datetime].include?(column.type) callstack.delete(name)
time_array_to_string(values, column.type) if values.empty?
send("#{name}=", nil)
else else
klass.new(*values) value = time_array_to_string(values, column.type)
send("#{name}=", value)
end end
send(name + "=", value)
rescue => ex rescue => ex
errors << ::ActiveRecord::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
@ -36,10 +34,11 @@ module ValidatesTimeliness
unless errors.empty? unless errors.empty?
raise ::ActiveRecord::MultiparameterAssignmentErrors.new(errors), "#{errors.size} error(s) on assignment of multiparameter attributes" raise ::ActiveRecord::MultiparameterAssignmentErrors.new(errors), "#{errors.size} error(s) on assignment of multiparameter attributes"
end end
execute_callstack_for_multiparameter_attributes_without_timeliness(callstack)
end end
def time_array_to_string(values, type) def time_array_to_string(values, type)
values = values.map(&:to_s) values = values.map {|v| v.to_s }
case type case type
when :date when :date