class NinjaModel::Reflection::AssociationReflection

Attributes

original_build_association_called[RW]

Public Class Methods

new(macro, name, options, ninja_model) click to toggle source
# File lib/ninja_model/reflection.rb, line 72
def initialize(macro, name, options, ninja_model)
  super
  @collection = macro.in?([:has_many])
end

Public Instance Methods

active_record_primary_key()
association_class() click to toggle source
# 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_key() click to toggle source
# 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) click to toggle source
# 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?() click to toggle source
# File lib/ninja_model/reflection.rb, line 150
def belongs_to?
  macro == :belongs_to
end
build_association(*options, &block) click to toggle source
# File lib/ninja_model/reflection.rb, line 77
def build_association(*options, &block)
  @original_build_association_called
  klass.new(*options, &block)
end
chain() click to toggle source
# File lib/ninja_model/reflection.rb, line 124
def chain
  [self]
end
collection?() click to toggle source
# File lib/ninja_model/reflection.rb, line 142
def collection?
  @collection
end
conditions() click to toggle source
# File lib/ninja_model/reflection.rb, line 128
def conditions
  [[options[:conditions]].compact]
end
foreign_key() click to toggle source
# File lib/ninja_model/reflection.rb, line 90
def foreign_key
  @foreign_key ||= options[:foreign_key] || derive_foreign_key
end
foreign_type() click to toggle source
# File lib/ninja_model/reflection.rb, line 99
def foreign_type
  @foreign_type ||= options[:foreign_type] || "#{name}_type"
end
has_inverse?() click to toggle source
# File lib/ninja_model/reflection.rb, line 132
def has_inverse?
  @options[:inverse_of]
end
inverse_of() click to toggle source
# 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
klass() click to toggle source
# File lib/ninja_model/reflection.rb, line 68
def klass
  @klass ||= ninja_model.send(:compute_type, class_name)
end
ninja_model_primary_key() click to toggle source
# 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
Also aliased as: active_record_primary_key
primary_key_column() click to toggle source
# 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_name() click to toggle source
# File lib/ninja_model/reflection.rb, line 94
def primary_key_name
  foreign_key
end
quoted_table_name() click to toggle source
# File lib/ninja_model/reflection.rb, line 86
def quoted_table_name
  raise NotImplementedError, "quoted_table_name is not implemented in NinjaModel"
end
table_name() click to toggle source
# File lib/ninja_model/reflection.rb, line 82
def table_name
  raise NotImplementedError, "table_name is not implemented in NinjaModel"
end
type() click to toggle source
# File lib/ninja_model/reflection.rb, line 103
def type
  @type ||= options[:as] && "#{options[:as]}_type"
end
validate?() click to toggle source
# File lib/ninja_model/reflection.rb, line 146
def validate?
  !options[:validate].nil? ? options[:validate] : (options[:autosave] == true || macro == :has_many)
end

Private Instance Methods

derive_class_name() click to toggle source
# File lib/ninja_model/reflection.rb, line 167
def derive_class_name
  class_name = name.to_s.camelize
  class_name = class_name.singularize if collection?
  class_name
end
derive_foreign_key() click to toggle source
# File lib/ninja_model/reflection.rb, line 173
def derive_foreign_key
  if belongs_to?
    "#{name}_id"
  elsif options[:as]
    "#{options[:as]}_id"
  else
    ninja_model.name.foreign_key
  end
end
primary_key(klass) click to toggle source
# File lib/ninja_model/reflection.rb, line 183
def primary_key(klass)
  klass.primary_key || raise(StandardError, "Unknown primary key for #{klass}")
end