ClassMethods

Constants

Methods

#_call_scope_context

def _call_scope_context(eval_context, query_params, proc)
  if proc.arity == 1
    eval_context.instance_exec(query_params, &proc)
  else
    eval_context.instance_exec(&proc)
  end
end

#_scope

def _scope
  @_scope ||= {}
end

#all

def all(new_var = nil)
  var = new_var || (current_scope ? current_scope.node_identity : :n)
  if current_scope
    current_scope.new_link(var)
  else
    self.as(var)
  end
end
#current_scope
nodoc:
def current_scope #:nodoc:
  ScopeRegistry.value_for(:current_scope, base_class.to_s)
end
#current_scope=
nodoc:
def current_scope=(scope) #:nodoc:
  ScopeRegistry.set_value_for(:current_scope, base_class.to_s, scope)
end
#has_scope?

rubocop:disable Style/PredicateName

def has_scope?(name)
  ActiveSupport::Deprecation.warn 'has_scope? is deprecated and may be removed from future releases, use scope? instead.', caller

  scope?(name)
end
#scope

Similar to ActiveRecord scope

def scope(name, proc)
  _scope[name.to_sym] = proc

  klass = class << self; self; end
  klass.instance_eval do
    define_method(name) do |query_params = nil, _ = nil|
      eval_context = ScopeEvalContext.new(self, current_scope || self.query_proxy)
      proc = _scope[name.to_sym]
      _call_scope_context(eval_context, query_params, proc)
    end
  end
end
#scope?

rubocop:enable Style/PredicateName

def scope?(name)
  _scope.key?(name.to_sym)
end