module Elasticsearch::Persistence::Scoping::Named::ClassMethods

Constants

BLACKLISTED_CLASS_METHODS

Public Instance Methods

all(options={}) click to toggle source
# File lib/elasticsearch/persistence/scoping/named.rb, line 8
def all(options={})
  if current_scope
    current_scope.clone
  else
    default_scoped.size(10000)
  end
end
scope(name, body, &block) click to toggle source
# File lib/elasticsearch/persistence/scoping/named.rb, line 31
def scope(name, body, &block)
  if dangerous_class_method?(name)
    raise ArgumentError, "You tried to define a scope named \"#{name}\" " \
      "on the model \"#{self.name}\", but Active Record already defined " \
      "a class method with the same name."
  end

  extension = Module.new(&block) if block

  singleton_class.send(:define_method, name) do |*args|
    scope = all.scoping { body.call(*args) }
    scope = scope.extending(extension) if extension

    scope || all
  end
end

Private Instance Methods

class_method_defined_within?(name, klass, superklass = klass.superclass) click to toggle source
# File lib/elasticsearch/persistence/scoping/named.rb, line 55
def class_method_defined_within?(name, klass, superklass = klass.superclass) # :nodoc
  if klass.respond_to?(name, true)
    if superklass.respond_to?(name, true)
      klass.method(name).owner != superklass.method(name).owner
    else
      true
    end
  else
    false
  end
end
dangerous_class_method?(method_name) click to toggle source
# File lib/elasticsearch/persistence/scoping/named.rb, line 51
def dangerous_class_method?(method_name)
  BLACKLISTED_CLASS_METHODS.include?(method_name.to_s) || class_method_defined_within?(method_name, Model, self.superclass)
end