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
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
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