Module: NapaPagination::GrapeHelpers
- Extended by:
- ActiveSupport::Concern
- Defined in:
- lib/napa_pagination/grape_helpers.rb
Instance Method Summary collapse
- #order_by_params!(data) ⇒ Object
- #paginate(data, with: nil, **args) ⇒ Object
- #represent_pagination(data) ⇒ Object
Instance Method Details
#order_by_params!(data) ⇒ Object
33 34 35 36 37 38 39 |
# File 'lib/napa_pagination/grape_helpers.rb', line 33 def order_by_params!(data) if params[:sort_by] && data.column_names.map(&:to_sym).include?(params[:sort_by].to_sym) sort_order = params[:sort_order] || :asc data.order!(params[:sort_by] => sort_order.to_sym) end data end |
#paginate(data, with: nil, **args) ⇒ Object
3 4 5 6 7 8 9 10 11 12 13 14 15 |
# File 'lib/napa_pagination/grape_helpers.rb', line 3 def paginate(data, with: nil, **args) raise ArgumentError.new(":with option is required") if with.nil? if data.respond_to?(:to_a) return {}.tap do |r| data = NapaPagination::Pagination.new(represent_pagination(data)) r[:data] = data.map{ |item| with.new(item).to_hash(args) } r[:pagination] = data.to_h end else return { data: with.new(data).to_hash(args) } end end |
#represent_pagination(data) ⇒ Object
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
# File 'lib/napa_pagination/grape_helpers.rb', line 17 def represent_pagination(data) # don't paginate if collection is already paginated return data if data.respond_to?(:total_count) page = params.try(:page) || 1 per_page = params.try(:per_page) || 25 order_by_params!(data) if data.is_a?(ActiveRecord::Relation) && data.size > 0 if data.is_a?(Array) Kaminari.paginate_array(data).page(page).per(per_page) else data.page(page).per(per_page) end end |