module MongoModel::AttributeMethods::Nested

Private Instance Methods

assign_nested_attributes_for_association(association, attributes) click to toggle source
# File lib/mongomodel/concerns/attribute_methods/nested.rb, line 73
def assign_nested_attributes_for_association(association, attributes)
  if obj = send(association)
    obj.attributes = attributes
  else
    send("build_#{association}", attributes)
  end
end
assign_nested_attributes_for_association_collection(association, attributes_collection) click to toggle source
# File lib/mongomodel/concerns/attribute_methods/nested.rb, line 81
def assign_nested_attributes_for_association_collection(association, attributes_collection)
  attributes_collection = convert_to_array(attributes_collection)
  options = self.nested_attributes_options[association]

  if options[:limit] && attributes_collection.size > options[:limit]
    raise TooManyDocuments, "Maximum #{options[:limit]} documents are allowed. Got #{attributes_collection.size} documents instead."
  end

  association = send(association)
  association.clear if options[:clear]

  attributes_collection.each do |attributes|
    association.build(attributes)
  end
end
assign_nested_attributes_for_collection(property, attributes_collection) click to toggle source
# File lib/mongomodel/concerns/attribute_methods/nested.rb, line 53
def assign_nested_attributes_for_collection(property, attributes_collection)
  attributes_collection = convert_to_array(attributes_collection)
  options = self.nested_attributes_options[property]

  if options[:limit] && attributes_collection.size > options[:limit]
    raise TooManyDocuments, "Maximum #{options[:limit]} documents are allowed. Got #{attributes_collection.size} documents instead."
  end

  collection = send(property)
  collection.clear if options[:clear]

  attributes_collection.each_with_index do |attributes, index|
    if collection[index]
      collection[index].attributes = attributes
    else
      collection[index] = attributes
    end
  end
end
assign_nested_attributes_for_property(property, attributes) click to toggle source
# File lib/mongomodel/concerns/attribute_methods/nested.rb, line 45
def assign_nested_attributes_for_property(property, attributes)
  if obj = send(property)
    obj.attributes = attributes
  else
    send("#{property}=", attributes)
  end
end
convert_to_array(params) click to toggle source
# File lib/mongomodel/concerns/attribute_methods/nested.rb, line 97
def convert_to_array(params)
  case params
  when Hash
    params.sort.map(&:last)
  else
    Array(params)
  end
end