Module: Napa::GrapeHelpers
- Extended by:
- ActiveSupport::Concern
- Defined in:
- lib/napa/grape_extensions/grape_helpers.rb
Instance Method Summary collapse
- #order_by_params!(data) ⇒ Object
- #paginate(data, with: nil, **args) ⇒ Object
- #permitted_params(options = {}) ⇒ Object
- #present_error(code, message = '', reasons = {}) ⇒ Object
- #represent(data, with: nil, **args) ⇒ Object
- #represent_pagination(data) ⇒ Object
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
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( = {}) = { include_missing: false }.merge() declared(params, ) end |
#present_error(code, message = '', reasons = {}) ⇒ Object
13 14 15 |
# File 'lib/napa/grape_extensions/grape_helpers.rb', line 13 def present_error(code, = '', reasons = {}) Napa::JsonError.new(code, , 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 |