diff options
author | Carlos Antonio da Silva <carlosantoniodasilva@gmail.com> | 2012-06-27 23:22:40 -0300 |
---|---|---|
committer | Carlos Antonio da Silva <carlosantoniodasilva@gmail.com> | 2012-08-18 09:55:23 -0300 |
commit | 2a700a03cee5366ad4a9af5b5f3a9c31a7e991fd (patch) | |
tree | 5249c4cc9d741963cd8734cbc7454fcdff9d9939 /activerecord/lib/active_record/attribute_assignment.rb | |
parent | 5bd96de6253bf45993a80ebc235b64f72b04d902 (diff) | |
download | rails-2a700a03cee5366ad4a9af5b5f3a9c31a7e991fd.tar.gz rails-2a700a03cee5366ad4a9af5b5f3a9c31a7e991fd.tar.bz2 rails-2a700a03cee5366ad4a9af5b5f3a9c31a7e991fd.zip |
Refactor some code in multiparameter assignment
Move some methods to the top to better organize them, since they're used
right at the beginning of the multiparameter assignment method chain.
Diffstat (limited to 'activerecord/lib/active_record/attribute_assignment.rb')
-rw-r--r-- | activerecord/lib/active_record/attribute_assignment.rb | 51 |
1 files changed, 25 insertions, 26 deletions
diff --git a/activerecord/lib/active_record/attribute_assignment.rb b/activerecord/lib/active_record/attribute_assignment.rb index bdd198791b..610411c0f0 100644 --- a/activerecord/lib/active_record/attribute_assignment.rb +++ b/activerecord/lib/active_record/attribute_assignment.rb @@ -150,14 +150,6 @@ module ActiveRecord ) end - def instantiate_time_object(name, values) - if self.class.send(:create_time_zone_conversion_attribute?, name, column_for_attribute(name)) - Time.zone.local(*values) - else - Time.time_with_datetime_fallback(self.class.default_timezone, *values) - end - end - def execute_callstack_for_multiparameter_attributes(callstack) errors = [] callstack.each do |name, values_with_empty_parameters| @@ -173,11 +165,33 @@ module ActiveRecord end end + def extract_callstack_for_multiparameter_attributes(pairs) + attributes = { } + + pairs.each do |(multiparameter_name, value)| + attribute_name = multiparameter_name.split("(").first + attributes[attribute_name] ||= {} + + parameter_value = value.empty? ? nil : type_cast_attribute_value(multiparameter_name, value) + attributes[attribute_name][find_parameter_position(multiparameter_name)] ||= parameter_value + end + + attributes + end + + def instantiate_time_object(name, values) + if self.class.send(:create_time_zone_conversion_attribute?, name, column_for_attribute(name)) + Time.zone.local(*values) + else + Time.time_with_datetime_fallback(self.class.default_timezone, *values) + end + end + def read_value_from_parameter(name, values_hash_from_param) + return if values_hash_from_param.values.compact.empty? + klass = (self.class.reflect_on_aggregation(name.to_sym) || column_for_attribute(name)).klass - if values_hash_from_param.values.all?{|v|v.nil?} - nil - elsif klass == Time + if klass == Time read_time_parameter_value(name, values_hash_from_param) elsif klass == Date read_date_parameter_value(name, values_hash_from_param) @@ -234,21 +248,6 @@ module ActiveRecord [values_hash_from_param.keys.max,upper_cap].min end - def extract_callstack_for_multiparameter_attributes(pairs) - attributes = { } - - pairs.each do |pair| - multiparameter_name, value = pair - attribute_name = multiparameter_name.split("(").first - attributes[attribute_name] = {} unless attributes.include?(attribute_name) - - parameter_value = value.empty? ? nil : type_cast_attribute_value(multiparameter_name, value) - attributes[attribute_name][find_parameter_position(multiparameter_name)] ||= parameter_value - end - - attributes - end - def type_cast_attribute_value(multiparameter_name, value) multiparameter_name =~ /\([0-9]*([if])\)/ ? value.send("to_" + $1) : value end |