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

Version Path
infinum_json_api_setup-0.0.7 lib/infinum_json_api_setup/json_api/serializer_options.rb
infinum_json_api_setup-0.0.6 lib/infinum_json_api_setup/json_api/serializer_options.rb
infinum_json_api_setup-0.0.5 lib/infinum_json_api_setup/json_api/serializer_options.rb
infinum_json_api_setup-0.0.4 lib/infinum_json_api_setup/json_api/serializer_options.rb
infinum_json_api_setup-0.0.3 lib/infinum_json_api_setup/json_api/serializer_options.rb