module MongoModel::DocumentExtensions::Scopes::ClassMethods

Public Instance Methods

current_scope() click to toggle source
# File lib/mongomodel/document/scopes.rb, line 52
def current_scope
  current_scopes.last || unscoped
end
default_scope(scope) click to toggle source
# File lib/mongomodel/document/scopes.rb, line 46
def default_scope(scope)
  reset_current_scopes
  previous_scope = default_scoping.last || unscoped
  default_scoping << previous_scope.merge(scope)
end
default_scoping() click to toggle source
# File lib/mongomodel/document/scopes.rb, line 64
def default_scoping
  @_default_scoping ||= []
end
default_scoping=(scoping) click to toggle source
# File lib/mongomodel/document/scopes.rb, line 68
def default_scoping=(scoping)
  @_default_scoping = scoping
end
inherited(subclass) click to toggle source
Calls superclass method
# File lib/mongomodel/document/scopes.rb, line 72
def inherited(subclass)
  super
  subclass.scopes = scopes.dup
  subclass.default_scoping = default_scoping.dup
end
scope(name, scope) click to toggle source
# File lib/mongomodel/document/scopes.rb, line 26
def scope(name, scope)
  name = name.to_sym

  if !scopes[name] && respond_to?(name, true)
    logger.warn "Creating scope :#{name}. " \
                "Overwriting existing method #{self.name}.#{name}."
  end

  scopes[name] = lambda do |*args|
    scope.is_a?(Proc) ? scope.call(*args) : scope
  end

  singleton_class.class_eval do
    define_method(name) do |*args|
      s = scopes[name].call(*args)
      scoped.merge(s)
    end
  end
end
scoped() click to toggle source
# File lib/mongomodel/document/scopes.rb, line 22
def scoped
  current_scope.clone
end
scopes() click to toggle source
# File lib/mongomodel/document/scopes.rb, line 56
def scopes
  @_scopes ||= {}
end
scopes=(scopes) click to toggle source
# File lib/mongomodel/document/scopes.rb, line 60
def scopes=(scopes)
  @_scopes = scopes
end
unscoped() click to toggle source
# File lib/mongomodel/document/scopes.rb, line 18
def unscoped
  @unscoped ||= MongoModel::Scope.new(self)
end

Protected Instance Methods

with_scope(scope) { || ... } click to toggle source
# File lib/mongomodel/document/scopes.rb, line 79
def with_scope(scope, &block)
  current_scopes << current_scope.merge(scope)

  begin
    yield
  ensure
    current_scopes.pop
  end
end

Private Instance Methods

current_scopes() click to toggle source
# File lib/mongomodel/document/scopes.rb, line 90
def current_scopes
  Thread.current[:"#{self}_scopes"] ||= default_scoping.dup
end
reset_current_scopes() click to toggle source
# File lib/mongomodel/document/scopes.rb, line 94
def reset_current_scopes
  Thread.current[:"#{self}_scopes"] = nil
end