Sha256: 5ace6bace729aeadc641ab457e23e55c5098f536b042c56819aab00e3c2fec01

Contents?: true

Size: 1.49 KB

Versions: 3

Compression:

Stored size: 1.49 KB

Contents

class ActiveModel::Serializer::Adapter::JsonApi::PaginationLinks
          FIRST_PAGE = 1

          attr_reader :collection, :context

          def initialize(collection, context)
            @collection = collection
            @context = context
          end

          def serializable_hash(options = {})
            pages_from.each_with_object({}) do |(key, value), hash|
              params = query_parameters.merge(page: { number: value, size: collection.size }).to_query

              hash[key] = "#{url(options)}?#{params}"
            end
          end

          private

          def pages_from
            return {} if collection.total_pages == FIRST_PAGE

            {}.tap do |pages|
              pages[:self] = collection.current_page

              unless collection.current_page == FIRST_PAGE
                pages[:first] = FIRST_PAGE
                pages[:prev]  = collection.current_page - FIRST_PAGE
              end

              unless collection.current_page == collection.total_pages
                pages[:next] = collection.current_page + FIRST_PAGE
                pages[:last] = collection.total_pages
              end
            end
          end

          def url(options)
            @url ||= options.fetch(:links, {}).fetch(:self, nil) || original_url
          end

          def original_url
            @original_url ||= context.original_url[/\A[^?]+/]
          end

          def query_parameters
            @query_parameters ||= context.query_parameters
          end
end

Version data entries

3 entries across 3 versions & 2 rubygems

Version Path
active_model_serializers-0.10.0.rc3 lib/active_model/serializer/adapter/json_api/pagination_links.rb
cheap_ams-0.10.11 lib/active_model/serializer/adapter/json_api/pagination_links.rb
cheap_ams-0.10.10 lib/active_model/serializer/adapter/json_api/pagination_links.rb