class Mongoid::Alize::Callback

Attributes

debug[RW]
denorm_attrs[RW]
inverse_klass[RW]
inverse_metadata[RW]
inverse_relation[RW]
klass[RW]
metadata[RW]
relation[RW]

Public Class Methods

new(_klass, _relation, _denorm_attrs) click to toggle source
# File lib/mongoid/alize/callback.rb, line 17
def initialize(_klass, _relation, _denorm_attrs)
  self.debug = ENV["ALIZE_DEBUG"]

  self.klass = _klass
  self.relation = _relation
  self.denorm_attrs = _denorm_attrs

  self.metadata = _klass.relations[_relation.to_s]
  if !(self.metadata.polymorphic? &&
        self.metadata.stores_foreign_key?)
    self.inverse_klass = self.metadata.klass
    self.inverse_relation = self.metadata.inverse
    self.inverse_metadata = self.inverse_klass.relations[inverse_relation.to_s]
  end
end

Public Instance Methods

alias_callback() click to toggle source
# File lib/mongoid/alize/callback.rb, line 46
def alias_callback
  unless callback_defined?(aliased_callback_name)
    klass.send(:alias_method, aliased_callback_name, callback_name)
    klass.send(:public, aliased_callback_name)
  end
end
aliased_callback_name() click to toggle source
# File lib/mongoid/alize/callback.rb, line 57
def aliased_callback_name
  :"denormalize_#{direction}_#{relation}"
end
attach() click to toggle source
# File lib/mongoid/alize/callback.rb, line 33
def attach
  # implement in subclasses
end
callback_attached?(callback_type, callback_name) click to toggle source
# File lib/mongoid/alize/callback.rb, line 37
def callback_attached?(callback_type, callback_name)
  !!klass.send(:"_#{callback_type}_callbacks").
    map(&:raw_filter).include?(callback_name)
end
callback_defined?(callback_name) click to toggle source
# File lib/mongoid/alize/callback.rb, line 42
def callback_defined?(callback_name)
  klass.method_defined?(callback_name)
end
callback_name() click to toggle source
# File lib/mongoid/alize/callback.rb, line 53
def callback_name
  :"_#{aliased_callback_name}"
end
define_denorm_attrs() click to toggle source
# File lib/mongoid/alize/callback.rb, line 61
def define_denorm_attrs
  _denorm_attrs = denorm_attrs
  if denorm_attrs.is_a?(Proc)
    klass.send(:define_method, denorm_attrs_name) do |inverse|
      self.instance_exec(inverse, &_denorm_attrs).map(&:to_s)
    end
  else
    klass.send(:define_method, denorm_attrs_name) do |inverse|
      _denorm_attrs.map(&:to_s)
    end
  end
end
denorm_attrs_name() click to toggle source
# File lib/mongoid/alize/callback.rb, line 74
def denorm_attrs_name
  :"#{callback_name}_attrs"
end
field_values(source, options={}) click to toggle source
# File lib/mongoid/alize/callback.rb, line 78
      def field_values(source, options={})
        extras = options[:id] ? "['_id']" : "[]"
        <<-RUBY
          value = (#{denorm_attrs_name}(#{source}) + #{extras}).inject({}) do |hash, name|
            hash[name] = #{source}.send(name)
            hash
          end
          value.respond_to?(:mongoize) ? value.mongoize : value
        RUBY
      end
fields_to_s() click to toggle source
# File lib/mongoid/alize/callback.rb, line 97
def fields_to_s
  if fields.is_a?(Proc)
    "Proc Given"
  else
    fields.join(", ")
  end
end
force_check() click to toggle source
# File lib/mongoid/alize/callback.rb, line 93
def force_check
  "force || self.force_denormalization"
end
force_param() click to toggle source
# File lib/mongoid/alize/callback.rb, line 89
def force_param
  "(force=false)"
end
to_s() click to toggle source
# File lib/mongoid/alize/callback.rb, line 105
def to_s
  "#{self.class.name}" +
  "\nModel: #{self.klass}, Relation: #{self.relation}" + (self.metadata.polymorphic? ?
  "\nPolymorphic" :
  "\nInverse: #{self.inverse_klass}, Relation: #{self.inverse_relation}") +
  "\nFields: #{fields_to_s}"
end