Class: Lolita::Adapter::CommonHelper::PaginationBuilder

Inherits:
Object
  • Object
show all
Defined in:
lib/lolita/adapter/common_helper.rb

Instance Method Summary collapse

Constructor Details

#initialize(adapter, page, per, options) ⇒ PaginationBuilder

Returns a new instance of PaginationBuilder.



25
26
27
28
29
30
# File 'lib/lolita/adapter/common_helper.rb', line 25

def initialize adapter,page,per,options
  @adapter = adapter
  @page = page
  @per = per
  @options = options || {}
end

Instance Method Details

#ability_criteriaObject



50
51
52
53
54
55
56
57
58
# 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_pageObject



82
83
84
85
86
87
88
89
90
91
92
93
94
95
# 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_abilityObject



97
98
99
100
101
102
# 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_criteriaObject



68
69
70
71
72
73
74
# 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_criteriaObject



40
41
42
43
44
45
46
47
48
# 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) ⇒ Object



76
77
78
79
80
# 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

#paramsObject



32
33
34
# File 'lib/lolita/adapter/common_helper.rb', line 32

def params
  request.respond_to?(:params) && request.params || {}
end

#relationObject



60
61
62
63
64
65
66
# 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

#requestObject



36
37
38
# File 'lib/lolita/adapter/common_helper.rb', line 36

def request
  @options[:request]
end

#sortingObject



104
105
106
# File 'lib/lolita/adapter/common_helper.rb', line 104

def sorting
  params[:s] ? params[:s].gsub(',',' ').gsub('|',',') : nil
end