Class: NinjaModel::Reflection::AssociationReflection

Inherits:
MacroReflection show all
Defined in:
lib/ninja_model/reflection.rb

Instance Attribute Summary collapse

Attributes inherited from MacroReflection

#macro, #name, #ninja_model, #options

Instance Method Summary collapse

Methods inherited from MacroReflection

#class_name

Constructor Details

#initialize(macro, name, options, ninja_model) ⇒ AssociationReflection

Returns a new instance of AssociationReflection.



72
73
74
75
# File 'lib/ninja_model/reflection.rb', line 72

def initialize(macro, name, options, ninja_model)
  super
  @collection = macro.in?([:has_many])
end

Instance Attribute Details

#original_build_association_calledObject

:nodoc



66
67
68
# File 'lib/ninja_model/reflection.rb', line 66

def original_build_association_called
  @original_build_association_called
end

Instance Method Details

#association_classObject



154
155
156
157
158
159
160
161
162
163
# File 'lib/ninja_model/reflection.rb', line 154

def association_class
  case macro
  when :belongs_to
    Associations::BelongsToAssociation
  when :has_many
    Associations::HasManyAssociation
  when :has_one
    Associations::HasOneAssociation
  end
end

#association_foreign_keyObject



111
112
113
# File 'lib/ninja_model/reflection.rb', line 111

def association_foreign_key
  @association_foreign_key ||= @options[:association_foreign_key] || class_name.foreign_key
end

#association_primary_key(klass = nil) ⇒ Object



115
116
117
# File 'lib/ninja_model/reflection.rb', line 115

def association_primary_key(klass = nil)
  options[:primary_key] || primary_key(klass || self.klass)
end

#belongs_to?Boolean

Returns:

  • (Boolean)


150
151
152
# File 'lib/ninja_model/reflection.rb', line 150

def belongs_to?
  macro == :belongs_to
end

#build_association(*options, &block) ⇒ Object



77
78
79
80
# File 'lib/ninja_model/reflection.rb', line 77

def build_association(*options, &block)
  @original_build_association_called
  klass.new(*options, &block)
end

#chainObject



124
125
126
# File 'lib/ninja_model/reflection.rb', line 124

def chain
  [self]
end

#collection?Boolean

Returns:

  • (Boolean)


142
143
144
# File 'lib/ninja_model/reflection.rb', line 142

def collection?
  @collection
end

#conditionsObject



128
129
130
# File 'lib/ninja_model/reflection.rb', line 128

def conditions
  [[options[:conditions]].compact]
end

#foreign_keyObject



90
91
92
# File 'lib/ninja_model/reflection.rb', line 90

def foreign_key
  @foreign_key ||= options[:foreign_key] || derive_foreign_key
end

#foreign_typeObject



99
100
101
# File 'lib/ninja_model/reflection.rb', line 99

def foreign_type
  @foreign_type ||= options[:foreign_type] || "#{name}_type"
end

#has_inverse?Boolean

Returns:

  • (Boolean)


132
133
134
# File 'lib/ninja_model/reflection.rb', line 132

def has_inverse?
  @options[:inverse_of]
end

#inverse_ofObject



136
137
138
139
140
# File 'lib/ninja_model/reflection.rb', line 136

def inverse_of
  if has_inverse?
    @inverse_of ||= klass.reflect_on_association(options[:inverse_of])
  end
end

#klassObject



68
69
70
# File 'lib/ninja_model/reflection.rb', line 68

def klass
  @klass ||= ninja_model.send(:compute_type, class_name)
end

#ninja_model_primary_keyObject Also known as: active_record_primary_key



119
120
121
# File 'lib/ninja_model/reflection.rb', line 119

def ninja_model_primary_key
  @ninja_model_primary_key ||= options[:primary_key] || primary_key(ninja_model)
end

#primary_key_columnObject



107
108
109
# File 'lib/ninja_model/reflection.rb', line 107

def primary_key_column
  @primary_key_column ||= klass.columns.find { |c| c.name == klass.primary_key }
end

#primary_key_nameObject



94
95
96
# File 'lib/ninja_model/reflection.rb', line 94

def primary_key_name
  foreign_key
end

#quoted_table_nameObject

Raises:

  • (NotImplementedError)


86
87
88
# File 'lib/ninja_model/reflection.rb', line 86

def quoted_table_name
  raise NotImplementedError, "quoted_table_name is not implemented in NinjaModel"
end

#table_nameObject

Raises:

  • (NotImplementedError)


82
83
84
# File 'lib/ninja_model/reflection.rb', line 82

def table_name
  raise NotImplementedError, "table_name is not implemented in NinjaModel"
end

#typeObject



103
104
105
# File 'lib/ninja_model/reflection.rb', line 103

def type
  @type ||= options[:as] && "#{options[:as]}_type"
end

#validate?Boolean

Returns:

  • (Boolean)


146
147
148
# File 'lib/ninja_model/reflection.rb', line 146

def validate?
  !options[:validate].nil? ? options[:validate] : (options[:autosave] == true || macro == :has_many)
end