class Ars::Familiar::Mongoid

Attributes

class_map[R]
model[R]
model_name[R]

Public Class Methods

new(model) click to toggle source
# File lib/ars/familiar/mongoid.rb, line 11
def initialize(model)
  @model_name = model
  if Object.const_defined? model.to_s, true
    @model = model.constantize
  end
end

Public Instance Methods

[](*args) click to toggle source
# File lib/ars/familiar/mongoid.rb, line 7
def [](*args)
  ConstantizableArray[args]
end
attributes_to_define!() click to toggle source
# File lib/ars/familiar/mongoid.rb, line 40
def attributes_to_define!
  @attributes_to_define = standard_fields.keys.map(&:to_sym)
end
id!() click to toggle source
# File lib/ars/familiar/mongoid.rb, line 36
def id!
  @id = primary_key? ? primary_key : :id
end
primary_key() click to toggle source
# File lib/ars/familiar/mongoid.rb, line 28
def primary_key
  @primary_key || primary_key!
end
primary_key!() click to toggle source
# File lib/ars/familiar/mongoid.rb, line 18
def primary_key!
  @primary_key =
    case
    when model.respond_to?(:primary_key)
      model.primary_key
    when model.respond_to?(:guid), model.public_method_defined?(:guid)
      :guid
    end
end
primary_key?() click to toggle source
# File lib/ars/familiar/mongoid.rb, line 32
def primary_key?
  !!primary_key
end
relation_switch(name) click to toggle source
# File lib/ars/familiar/mongoid.rb, line 62
def relation_switch(name)
  case name.name
  when 'Mongoid::Relations::Embedded::Many', 'Mongoid::Relations::Referenced::Many'
    :has_many
  when 'Mongoid::Relations::Embedded::One',  'Mongoid::Relations::Referenced::One'
    :has_one
  when 'Mongoid::Relations::Referenced::ManyToMany'
    return :has_many, :belongs_to
  else
    raise StandardError, "Unknown Relationship: #{name}"
  end
end
relationships_to_define!(**opts) click to toggle source
# File lib/ars/familiar/mongoid.rb, line 49
def relationships_to_define!(**opts)
  filter, class_map = extract_options(opts)

  @relationships_to_define =
    model.relations.values.select(&filter).flat_map { |relation|
    name = relation.fetch(:name)

    [*relation_switch(relation.fetch(:relation))].
      map{|rel| [rel, name, class_name: class_map[name]] }.
      compact
  }.compact
end
standard_fields() click to toggle source
# File lib/ars/familiar/mongoid.rb, line 44
def standard_fields
  model.fields.select{|name, field| field.class.name == 'Mongoid::Fields::Standard'}.
    tap{|fields| fields[id] = fields.delete("_id") }
end