Module: NapaPagination::GrapeHelpers

Extended by:
ActiveSupport::Concern
Defined in:
lib/napa_pagination/grape_helpers.rb

Instance Method Summary collapse

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

Raises:

  • (ArgumentError)


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