Class: Ars::Familiar::Mongoid

Inherits:
Base
  • Object
show all
Defined in:
lib/ars/familiar/mongoid.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods inherited from Base

#attributes_to_define, #extract_options, #id, #map_classes, #relationships_to_define, #scribe

Constructor Details

#initialize(model) ⇒ Mongoid

Returns a new instance of Mongoid.



11
12
13
14
15
16
# 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

Instance Attribute Details

#class_mapObject (readonly)

Returns the value of attribute class_map.



5
6
7
# File 'lib/ars/familiar/mongoid.rb', line 5

def class_map
  @class_map
end

#modelObject (readonly)

Returns the value of attribute model.



5
6
7
# File 'lib/ars/familiar/mongoid.rb', line 5

def model
  @model
end

#model_nameObject (readonly)

Returns the value of attribute model_name.



5
6
7
# File 'lib/ars/familiar/mongoid.rb', line 5

def model_name
  @model_name
end

Instance Method Details

#[](*args) ⇒ Object



7
8
9
# File 'lib/ars/familiar/mongoid.rb', line 7

def [](*args)
  ConstantizableArray[args]
end

#attributes_to_define!Object



40
41
42
# File 'lib/ars/familiar/mongoid.rb', line 40

def attributes_to_define!
  @attributes_to_define = standard_fields.keys.map(&:to_sym)
end

#id!Object



36
37
38
# File 'lib/ars/familiar/mongoid.rb', line 36

def id!
  @id = primary_key? ? primary_key : :id
end

#primary_keyObject



28
29
30
# File 'lib/ars/familiar/mongoid.rb', line 28

def primary_key
  @primary_key || primary_key!
end

#primary_key!Object



18
19
20
21
22
23
24
25
26
# 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?Boolean

Returns:

  • (Boolean)


32
33
34
# File 'lib/ars/familiar/mongoid.rb', line 32

def primary_key?
  !!primary_key
end

#relation_switch(name) ⇒ Object



62
63
64
65
66
67
68
69
70
71
72
73
# 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) ⇒ Object



49
50
51
52
53
54
55
56
57
58
59
60
# 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_fieldsObject



44
45
46
47
# 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