def execute_callstack_for_multiparameter_attributes(callstack)
errors = []
callstack.each do |name, values|
column = column_for_attribute(name)
if column
klass = column.klass
if values.empty? or (column.type == :time and !values[-2..-1].all?) or ([:date, :datetime].include?(column.type) and !values.all?)
send(name + "=", nil)
else
values = [2000, 1, 1, values[-2], values[-1]] if column.type == :time and !values[0..2].all?
begin
send(name + "=", Time == klass ? (@@default_timezone == :utc ? klass.utc(*values) : klass.local(*values)) : klass.new(*values))
rescue => ex
errors << AttributeAssignmentError.new("error on assignment #{values.inspect} to #{name}", ex, name)
end
end
end
end
unless errors.empty?
raise MultiparameterAssignmentErrors.new(errors), "#{errors.size} error(s) on assignment of multiparameter attributes"
end
end