class EmbeddedModel::Embedder

Public Class Methods

new(container, column, options = {}) click to toggle source
# File lib/embedded_model/embedder.rb, line 3
def initialize(container, column, options = {})
  @container = container
  @column = column
  @class_name = options[:class_name]
end

Public Instance Methods

embed_collection() click to toggle source
# File lib/embedded_model/embedder.rb, line 13
def embed_collection
  embed collection_builder, default: []
end
embed_object() click to toggle source
# File lib/embedded_model/embedder.rb, line 9
def embed_object
  embed object_builder
end

Private Instance Methods

collection_builder() click to toggle source
# File lib/embedded_model/embedder.rb, line 42
def collection_builder
  ->(arr) { arr.try(:map, &object_builder) }
end
embed(builder, options = {}) click to toggle source
# File lib/embedded_model/embedder.rb, line 19
def embed(builder, options = {})
  @container.attribute(@column, EmbeddedModel::Type.new(&builder), options)
end
model() click to toggle source
# File lib/embedded_model/embedder.rb, line 23
def model
  @model ||=
    begin
      return @class_name if @class_name.is_a?(Class)
      (@class_name || @column).to_s.classify.constantize
    end
end
object_builder() click to toggle source
# File lib/embedded_model/embedder.rb, line 31
def object_builder
  ->(object_or_attributes) do
    if object_or_attributes.is_a?(model)
      object_or_attributes
    else
      attributes = object_or_attributes.try(:to_hash)
      model.new(attributes) if attributes
    end
  end
end