Sha256: f3f6ddcb53120ef7b0babb863f59593e39568fa19043d5ed3d6485dee86038dd

Contents?: true

Size: 1.2 KB

Versions: 27

Compression:

Stored size: 1.2 KB

Contents

module MongoModel
  module AttributeMethods
    module MultiParameterAssignment
      extend ActiveSupport::Concern
      
      def attributes=(attrs)#:nodoc:
        super(transform_multiparameter_attributes(attrs))
      end
    
    private
      # Converts multiparameter attributes into array format. For example, the parameters
      #   { "start_date(1i)" => "2010", "start_date(2i)" => "9", "start_date(3i)" => "4" }
      # will be converted to:
      #   { "start_date" => [2010, 9, 4] }
      def transform_multiparameter_attributes(attrs)
        attrs.merge(extract_multiparameter_attributes(attrs))
      end
      
      def extract_multiparameter_attributes(attrs)
        multiparameter_attributes = Hash.new { |h, k| h[k] = [] }
        
        attrs.each do |k, v|
          if k.to_s =~ /(.*)\((\d+)([if])?\)/
            multiparameter_attributes[$1][$2.to_i - 1] = type_cast_attribute_value($3, v)
            attrs.delete(k)
          end
        end
        
        multiparameter_attributes
      end
      
      def type_cast_attribute_value(type, value)
        case type
        when 'i', 'f'
          value.send("to_#{type}")
        else
          value
        end
      end
    end
  end
end

Version data entries

27 entries across 27 versions & 1 rubygems

Version Path
mongomodel-0.4.9 lib/mongomodel/concerns/attribute_methods/multi_parameter_assignment.rb
mongomodel-0.4.8 lib/mongomodel/concerns/attribute_methods/multi_parameter_assignment.rb
mongomodel-0.4.7 lib/mongomodel/concerns/attribute_methods/multi_parameter_assignment.rb
mongomodel-0.4.6 lib/mongomodel/concerns/attribute_methods/multi_parameter_assignment.rb
mongomodel-0.4.5 lib/mongomodel/concerns/attribute_methods/multi_parameter_assignment.rb
mongomodel-0.4.4 lib/mongomodel/concerns/attribute_methods/multi_parameter_assignment.rb
mongomodel-0.4.3 lib/mongomodel/concerns/attribute_methods/multi_parameter_assignment.rb
mongomodel-0.4.2 lib/mongomodel/concerns/attribute_methods/multi_parameter_assignment.rb
mongomodel-0.4.1 lib/mongomodel/concerns/attribute_methods/multi_parameter_assignment.rb
mongomodel-0.4.0 lib/mongomodel/concerns/attribute_methods/multi_parameter_assignment.rb
mongomodel-0.3.6 lib/mongomodel/concerns/attribute_methods/multi_parameter_assignment.rb
mongomodel-0.3.5 lib/mongomodel/concerns/attribute_methods/multi_parameter_assignment.rb
mongomodel-0.3.4 lib/mongomodel/concerns/attribute_methods/multi_parameter_assignment.rb
mongomodel-0.3.3 lib/mongomodel/concerns/attribute_methods/multi_parameter_assignment.rb
mongomodel-0.3.2 lib/mongomodel/concerns/attribute_methods/multi_parameter_assignment.rb
mongomodel-0.3.1 lib/mongomodel/concerns/attribute_methods/multi_parameter_assignment.rb
mongomodel-0.3.0 lib/mongomodel/concerns/attribute_methods/multi_parameter_assignment.rb
mongomodel-0.2.20 lib/mongomodel/concerns/attribute_methods/multi_parameter_assignment.rb
mongomodel-0.2.19 lib/mongomodel/concerns/attribute_methods/multi_parameter_assignment.rb
mongomodel-0.2.18 lib/mongomodel/concerns/attribute_methods/multi_parameter_assignment.rb