Sha256: 244a49349473b8da396abb0d16defbb8e73f1f28836e2030dc3a191660c6b0f8

Contents?: true

Size: 1.42 KB

Versions: 4

Compression:

Stored size: 1.42 KB

Contents

# frozen_string_literal: true

module Lcms
  module Engine
    class Pagination
      def initialize(params)
        @params = params
      end

      def params(strict: false)
        @pagination_params ||= begin
          default_params = { page: 1, per_page: 20, order: :asc }
          expected_params = @params.slice(:page, :per_page, :order).symbolize_keys
          pagination = default_params.merge(expected_params)

          pagination[:page] = pagination[:page].to_i
          pagination[:per_page] = pagination[:per_page].to_i
          pagination[:order] = pagination[:order].to_sym

          raise StandardError unless pagination[:page].positive?
          raise StandardError unless pagination[:per_page].positive?
          raise StandardError unless %i(asc desc).include? pagination[:order]

          pagination
        end
        strict ? @pagination_params.slice(:page, :per_page) : @pagination_params
      end

      def serialize(resources, serializer)
        options = { root: :results }
        options[:meta_key] = :pagination
        options[:pagination] = {
          total_pages: resources.total_pages,
          current_page: resources.current_page,
          per_page: resources.per_page,
          order: params[:order],
          total_hits: resources.total_entries
        }
        options[:each_serializer] = serializer
        ActiveModel::ArraySerializer.new(resources, options).as_json
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
lcms-engine-0.1.4 app/entities/lcms/engine/pagination.rb
lcms-engine-0.1.3 app/entities/lcms/engine/pagination.rb
lcms-engine-0.1.2 app/entities/lcms/engine/pagination.rb
lcms-engine-0.1.0 app/entities/lcms/engine/pagination.rb