module ActiveModel::Embedding::Collecting
Attributes
document_class[R]
documents[R]
to_a[R]
to_ary[R]
Public Class Methods
new(documents)
click to toggle source
# File lib/active_model/embedding/collecting.rb, line 12 def initialize(documents) @documents = documents @document_class = documents.first.class end
Public Instance Methods
==(other)
click to toggle source
# File lib/active_model/embedding/collecting.rb, line 103 def ==(other) documents.map(&:attributes) == other.map(&:attributes) end
as_json()
click to toggle source
# File lib/active_model/embedding/collecting.rb, line 95 def as_json documents.as_json end
attributes=(documents_attributes)
click to toggle source
# File lib/active_model/embedding/collecting.rb, line 17 def attributes=(documents_attributes) documents_attributes = sanitize_for_mass_assignment(documents_attributes) case documents_attributes when Hash documents_attributes.each do |index, document_attributes| index = index.to_i id = fetch_id(document_attributes) || index document = find_by_id id if id unless document document = documents[index] || build end document.attributes = document_attributes end when Array documents_attributes.each do |document_attributes| id = fetch_id(document_attributes) document = find_by_id id if id unless document document = build end document.attributes = document_attributes end else raise_attributes_error end end
build(attributes = {})
click to toggle source
# File lib/active_model/embedding/collecting.rb, line 53 def build(attributes = {}) case attributes when Hash document = document_class.new(attributes) append document document when Array attributes.map do |document_attributes| build(document_attributes) end else raise_attributes_error end end
each() { |document| ... }
click to toggle source
# File lib/active_model/embedding/collecting.rb, line 89 def each return self.to_enum unless block_given? documents.each { |document| yield document } end
find_by_id(id)
click to toggle source
# File lib/active_model/embedding/collecting.rb, line 49 def find_by_id(id) documents.find { |document| document.id == id } end
push(*new_documents)
click to toggle source
# File lib/active_model/embedding/collecting.rb, line 70 def push(*new_documents) new_documents = new_documents.flatten valid_documents = new_documents.all? { |document| document.is_a? document_class } unless valid_documents raise ArgumentError, "Expect arguments to be of class #{document_class}" end @documents.push(*new_documents) end
save()
click to toggle source
# File lib/active_model/embedding/collecting.rb, line 85 def save documents.all?(&:save) end
to_json()
click to toggle source
# File lib/active_model/embedding/collecting.rb, line 99 def to_json as_json.to_json end
Private Instance Methods
fetch_id(attributes)
click to toggle source
# File lib/active_model/embedding/collecting.rb, line 109 def fetch_id(attributes) attributes["id"].to_i end
raise_attributes_error()
click to toggle source
# File lib/active_model/embedding/collecting.rb, line 113 def raise_attributes_error raise ArgumentError, "Expect attributes to be a Hash or Array, but got a #{attributes.class}" end