Newer
Older
dmpopidor / app / controllers / concerns / paginable.rb
module Paginable
  extend ActiveSupport::Concern

  #included do
  #  helper :paginable_renderise
  #end

  # Renders paginable layout with the partial view passed
  # partial {String} - Represents a path to where the partial view is stored
  # controller {String} - Represents the name of the controller to handles the pagination
  # action {String} - Represents the method name within the controller
  # scope {ActiveRecord::Relation} - Represents scope variable
  # locals {Hash} - A hash objects with any additional local variables to be passed to the partial view
  def paginable_renderise(partial: nil, controller: params[:controller], action: params[:action], scope: nil, locals: {})
    raise ArgumentError, 'scope should be an instance of ActiveRecord::Relation class' unless scope.is_a?(ActiveRecord::Relation)
    raise ArgumentError, 'locals should be an instance of Hash' unless locals.is_a?(Hash)
    render(layout: '/layouts/paginable', partial: partial, locals: { 
      controller: controller,
      action: action,
      # The scope is paginable if it has been chained with page method from kaminari which contains methods such as total_pages
      paginable: scope.respond_to?(:total_pages), 
      scope: scope }.merge(locals))
  end
end