Module: Believer::Extending
- Included in:
- Query
- Defined in:
- lib/believer/extending.rb
Instance Method Summary collapse
- #apply_modules(modules) ⇒ Object
-
#extending(*modules) ⇒ Object
Used to extend a scope with additional methods, either through a module or through a block provided.
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 |