Class: IronAdmin::Adapters::Mongoid::AssociationWrapper

Inherits:
Object
  • Object
show all
Defined in:
lib/iron_admin/adapters/mongoid/association_wrapper.rb

Overview

Wraps a Mongoid relation metadata object to present the interface expected by FieldInferrer and other IronAdmin consumers.

Normalizes Mongoid's embedded association macros to their IronAdmin equivalents: embeds_many → :has_many, embeds_one → :has_one, embedded_in → :belongs_to.

Constant Summary collapse

MACRO_MAP =
{
  embeds_many: :has_many,
  embeds_one: :has_one,
  embedded_in: :belongs_to,
}.freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(relation) ⇒ AssociationWrapper

Returns a new instance of AssociationWrapper.



25
26
27
28
29
# File 'lib/iron_admin/adapters/mongoid/association_wrapper.rb', line 25

def initialize(relation)
  @relation = relation
  @name = relation.name.to_sym
  @macro = MACRO_MAP.fetch(raw_macro_for(relation), raw_macro_for(relation))
end

Instance Attribute Details

#macroSymbol (readonly)

Returns The normalized macro (:belongs_to, :has_many, :has_one, :has_and_belongs_to_many).

Returns:

  • (Symbol)

    The normalized macro (:belongs_to, :has_many, :has_one, :has_and_belongs_to_many)



17
18
19
# File 'lib/iron_admin/adapters/mongoid/association_wrapper.rb', line 17

def macro
  @macro
end

#nameSymbol (readonly)

Returns The association name.

Returns:

  • (Symbol)

    The association name



14
15
16
# File 'lib/iron_admin/adapters/mongoid/association_wrapper.rb', line 14

def name
  @name
end

Instance Method Details

#foreign_keyObject



56
57
58
59
60
# File 'lib/iron_admin/adapters/mongoid/association_wrapper.rb', line 56

def foreign_key
  return "" unless @relation.respond_to?(:foreign_key)

  @relation.foreign_key.to_s
end

#foreign_typeObject



68
69
70
# File 'lib/iron_admin/adapters/mongoid/association_wrapper.rb', line 68

def foreign_type
  "#{@name}_type"
end

#klassObject



50
51
52
53
54
# File 'lib/iron_admin/adapters/mongoid/association_wrapper.rb', line 50

def klass
  @relation.class_name.constantize
rescue NameError
  nil
end

#polymorphic?Boolean

Returns:

  • (Boolean)


62
63
64
65
66
# File 'lib/iron_admin/adapters/mongoid/association_wrapper.rb', line 62

def polymorphic?
  return false unless @relation.respond_to?(:polymorphic?)

  @relation.polymorphic?
end