Class: Lolita::Adapter::CommonHelper::PaginationBuilder
- Defined in:
- lib/lolita/adapter/common_helper.rb
Instance Method Summary collapse
- #ability_criteria ⇒ Object
- #create_page ⇒ Object
- #current_ability ⇒ Object
- #custom_criteria ⇒ Object
-
#initialize(adapter, page, per, options) ⇒ PaginationBuilder
constructor
A new instance of PaginationBuilder.
- #nested_criteria ⇒ Object
- #pagination_scope_for_klass(method_name, page, per, options) ⇒ Object
- #params ⇒ Object
- #relation ⇒ Object
- #request ⇒ Object
- #sorting ⇒ Object
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, @adapter = adapter @page = page @per = per @options = || {} end |
Instance Method Details
#ability_criteria ⇒ Object
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_page ⇒ Object
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_ability ⇒ Object
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_criteria ⇒ Object
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_criteria ⇒ Object
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, ) if @adapter.klass.respond_to?(method_name) @adapter.klass.send(method_name,page,per,) end end |
#params ⇒ Object
32 33 34 |
# File 'lib/lolita/adapter/common_helper.rb', line 32 def params request.respond_to?(:params) && request.params || {} end |
#relation ⇒ Object
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 |
#request ⇒ Object
36 37 38 |
# File 'lib/lolita/adapter/common_helper.rb', line 36 def request @options[:request] end |
#sorting ⇒ Object
104 105 106 |
# File 'lib/lolita/adapter/common_helper.rb', line 104 def sorting params[:s] ? params[:s].gsub(',',' ').gsub('|',',') : nil end |