Module: Believer::Extending

Included in:
Query
Defined in:
lib/believer/extending.rb

Instance Method Summary collapse

Instance Method Details

#apply_modules(modules) ⇒ Object



50
51
52
53
54
55
# File 'lib/believer/extending.rb', line 50

def apply_modules(modules)
  unless modules.empty?
    @extensions += modules
    modules.each {|extension| extend(extension) }
  end
end

#extending(*modules) ⇒ Object

Used to extend a scope with additional methods, either through a module or through a block provided.

The object returned is a relation, which can be further extended.

Using a module

module Pagination
  def page(number)
    # pagination code goes here
  end
end

scope = Model.scoped.extending(Pagination)
scope.page(params[:page])

You can also pass a list of modules:

scope = Model.scoped.extending(Pagination, SomethingElse)

Using a block

scope = Model.scoped.extending do
  def page(number)
    # pagination code goes here
  end
end
scope.page(params[:page])

You can also use a block and a module list:

scope = Model.scoped.extending(Pagination) do
  def per_page(number)
    # pagination code goes here
  end
end


40
41
42
43
44
45
46
47
48
# File 'lib/believer/extending.rb', line 40

def extending(*modules)
  modules << Module.new(&Proc.new) if block_given?

  return self if modules.empty?

  relation = clone
  relation.send(:apply_modules, modules.flatten)
  relation
end