Module: Napa::GrapeHelpers

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

Instance Method Summary collapse

Instance Method Details

#order_by_params!(data) ⇒ Object



52
53
54
55
56
57
58
# File 'lib/napa/grape_extensions/grape_helpers.rb', line 52

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)


22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/napa/grape_extensions/grape_helpers.rb', line 22

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 = Napa::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

#permitted_params(options = {}) ⇒ Object



17
18
19
20
# File 'lib/napa/grape_extensions/grape_helpers.rb', line 17

def permitted_params(options = {})
  options = { include_missing: false }.merge(options)
  declared(params, options)
end

#present_error(code, message = '', reasons = {}) ⇒ Object



13
14
15
# File 'lib/napa/grape_extensions/grape_helpers.rb', line 13

def present_error(code, message = '', reasons = {})
  Napa::JsonError.new(code, message, reasons)
end

#represent(data, with: nil, **args) ⇒ Object



3
4
5
6
7
8
9
10
11
# File 'lib/napa/grape_extensions/grape_helpers.rb', line 3

def represent(data, with: nil, **args)
  fail ArgumentError, ':with option is required' if with.nil?

  if data.respond_to?(:map)
    return { data: data.map { |item| with.new(item).to_hash(args) } }
  else
    return { data: with.new(data).to_hash(args) }
  end
end

#represent_pagination(data) ⇒ Object



36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/napa/grape_extensions/grape_helpers.rb', line 36

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