class Garner::Mixins::Mongoid::Identity

Attributes

conditions[RW]
handle[RW]
klass[RW]
proxy_binding[RW]

Public Class Methods

conditions_for(klass, handle) click to toggle source
# File lib/garner/mixins/mongoid/identity.rb, line 52
def self.conditions_for(klass, handle)
  # Multiple-ID conditions
  conditions = {
    '$or' => Garner.config.mongoid_identity_fields.map do |field|
      { field => handle }
    end
  }

  # _type conditions
  selector = klass.where({})
  conditions.merge!(selector.send(:type_selection)) if selector.send(:type_selectable?)

  conditions
end
from_class_and_handle(klass, handle) click to toggle source

Instantiate a new Mongoid::Identity.

@param klass [Class] A @param handle [Object] A String, Fixnum, BSON::ObjectId, etc.

identifying the object.

@return [Garner::Mixins::Mongoid::Identity]

# File lib/garner/mixins/mongoid/identity.rb, line 15
def self.from_class_and_handle(klass, handle)
  validate_class!(klass)

  new.tap do |identity|
    identity.klass = klass
    identity.handle = handle
    identity.conditions = conditions_for(klass, handle)
  end
end
new() click to toggle source
# File lib/garner/mixins/mongoid/identity.rb, line 25
def initialize
  @conditions = {}
end
validate_class!(klass) click to toggle source
# File lib/garner/mixins/mongoid/identity.rb, line 44
def self.validate_class!(klass)
  if !klass.include?(::Mongoid::Document)
    fail 'Must instantiate from a Mongoid class'
  elsif klass.embedded?
    fail 'Cannot instantiate from an embedded document class'
  end
end

Public Instance Methods

to_s() click to toggle source

Stringize this identity for purposes of marshaling.

@return [String]

# File lib/garner/mixins/mongoid/identity.rb, line 40
def to_s
  "#{self.class.name}/klass=#{klass},handle=#{handle}"
end