Sha256: dccd4af4a1a96a2b6fd82c40e5715c7f2a324fc0c6cafdafff0a2fe0511c83d7
Contents?: true
Size: 1.87 KB
Versions: 5
Compression:
Stored size: 1.87 KB
Contents
module InfinumJsonApiSetup module JsonApi class SerializerOptions # @param [Hash] opts # @option opts [Hash] :params # @option opts [Object] :pagination_details def initialize(params:, pagination_details:) @params = params @pagination_details = pagination_details end # @return [Hash] def build { meta: meta, links: links, fields: fields, include: include }.compact end private attr_reader :params attr_reader :pagination_details def meta return {} unless pagination_details { current_page: pagination_details.page, total_pages: pagination_details.pages, total_count: pagination_details.count, padding: pagination_details.vars.fetch(:outset).to_i, page_size: pagination_details.vars.fetch(:items).to_i, max_page_size: Pagy::VARS[:max_items] } end def links return {} unless pagination_details { self: build_link(pagination_details.page), first: build_link(1), last: build_link(pagination_details.last), prev: build_link(pagination_details.prev), next: build_link(pagination_details.next) }.compact end def build_link(page) return unless page link_params = params.deep_dup link_params[:page] = { number: page, size: pagination_details.vars.fetch(:items), padding: pagination_details.vars.fetch(:outset) }.compact Rails.application.routes.url_helpers.url_for(link_params) end def fields return nil unless params[:fields] params[:fields].transform_values { |fields| fields.split(',') } end def include params[:include]&.split(',') end end end end
Version data entries
5 entries across 5 versions & 1 rubygems