class Lolita::Adapter::CommonHelper::PaginationBuilder

Public Class Methods

new(adapter,page,per,options) click to toggle source
# File lib/lolita/adapter/common_helper.rb, line 25
def initialize adapter,page,per,options
  @adapter = adapter
  @page = page
  @per = per
  @options = options || {}
end

Public Instance Methods

ability_criteria() click to toggle source
# File lib/lolita/adapter/common_helper.rb, line 50
def ability_criteria
  @ability_criteria ||= if @adapter.klass.respond_to?(:accessible_by)
    @adapter.klass.accessible_by(current_ability)
  elsif current_ability.respond_to?(:scope)
    current_ability.scope
  else
    nil
  end
end
create_page() click to toggle source
# File lib/lolita/adapter/common_helper.rb, line 82
def create_page
  page_criteria = ability_criteria ? relation.merge(ability_criteria) : relation
  page_criteria = if nested_criteria
    page_criteria.merge(nested_criteria)
  elsif custom_criteria
    custom_criteria.merge(page_criteria)
  else
    page_criteria
  end
  unless page_criteria.respond_to?(:current_page)
    page_criteria = page_criteria.send(@adapter.order_method, sorting).page(@page).per(@per)
  end
  page_criteria
end
current_ability() click to toggle source
# File lib/lolita/adapter/common_helper.rb, line 97
def current_ability
  controller = request && request.headers["action_controller.instance"]
  if controller && controller.respond_to?(:current_ability)
    controller.current_ability
  end
end
custom_criteria() click to toggle source
# File lib/lolita/adapter/common_helper.rb, line 68
def custom_criteria
  @custom_criteria ||= if @options[:pagination_method]
    pagination_scope_for_klass(@options[:pagination_method], @page, @per, @options)
  else
    nil
  end
end
nested_criteria() click to toggle source
# File lib/lolita/adapter/common_helper.rb, line 40
def nested_criteria
  nested_hsh = params[:nested]
  @nested_criteria ||= if params[:nested] && !params[:nested][:association]
    nested_hsh = nested_hsh.reject{|k,v| [:parent,:path].include?(k.to_sym)}
    @adapter.klass.where(nested_hsh)
  else
    nil
  end
end
pagination_scope_for_klass(method_name, page, per, options) click to toggle source
# File lib/lolita/adapter/common_helper.rb, line 76
def pagination_scope_for_klass(method_name, page, per, options)
  if @adapter.klass.respond_to?(method_name)
    @adapter.klass.send(method_name,page,per,options)
  end
end
params() click to toggle source
# File lib/lolita/adapter/common_helper.rb, line 32
def params
  request.respond_to?(:params) && request.params || {}
end
relation() click to toggle source
# File lib/lolita/adapter/common_helper.rb, line 60
def relation
  if params[:nested] && params[:nested][:association]
    @adapter.find(hsh[:nested][:id]).send(hsh[:nested][:association])
  else
    @adapter.klass.unscoped
  end
end
request() click to toggle source
# File lib/lolita/adapter/common_helper.rb, line 36
def request
  @options[:request]
end
sorting() click to toggle source
# File lib/lolita/adapter/common_helper.rb, line 104
def sorting
  params[:s] ? params[:s].gsub(',',' ').gsub('|',',') : nil
end