module Napa::GrapeHelpers
Public Instance Methods
order_by_params!(data)
click to toggle source
# 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)
click to toggle source
# 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 = {})
click to toggle source
# 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 = {})
click to toggle source
# 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)
click to toggle source
# 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)
click to toggle source
# 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