module Querii::QueryObject::ClassMethods

Attributes

model_name[RW]

optionally override the default determined by top level namespace

Public Instance Methods

all(*args, relation: base_class.all, **kargs)
Alias for: call
call(*args, relation: base_class.all, **kargs) click to toggle source
# File lib/querii/query_object.rb, line 17
def call(*args, relation: base_class.all, **kargs)
  relation.extending(self::Scopes).default(*args, **kargs)
end
Also aliased as: all
default_scope(scope = nil) click to toggle source
# File lib/querii/query_object.rb, line 41
def default_scope(scope = nil)
  scope = Proc.new if block_given?
  scope(:default, scope)
end
scope(name, body, &block) click to toggle source
# File lib/querii/query_object.rb, line 23
def scope(name, body, &block)
  unless body.respond_to?(:call)
    raise ArgumentError, 'The scope body needs to be callable.'
  end

  self::Scopes.send(:define_method, name) do |*args, **kargs|
    # unfortunately empty double splatted kargs still count as arguments
    # for a lambda's argument arity checking
    if kargs.empty?
      scope = all.scoping { instance_exec(*args, &body) }
    else
      scope = all.scoping { instance_exec(*args, **kargs, &body) }
    end

    scope || all
  end
end

Private Instance Methods

base_class() click to toggle source

queries are namespaced by plural model name from which we can infer query base model

# File lib/querii/query_object.rb, line 48
def base_class
  klass = model_name || self.to_s.split('::').first.singularize
  klass.to_s.constantize
end