Sha256: eb233cdf1025885b0c472d3d768015ee56fb496b52a52202cddf3e7467fb9781

Contents?: true

Size: 1.37 KB

Versions: 16

Compression:

Stored size: 1.37 KB

Contents

# frozen_string_literal: true

module EIVO
  module Concerns
    module Pagination
      extend ::ActiveSupport::Concern

      def paginate(collection)
        unless ::ActiveModel::Type::Boolean.new.cast(params[:pagination]) == false
          limit = 50
          if params[:limit]
            limit = [[params[:limit].to_i, 1].max, 500].min
          end

          collection = collection.page(params[:page]).per(limit)
          @serializer_options.merge!(pagination_options(collection))
        end

        collection
      end

      def pagination_options(collection)
        options = {
          is_collection: true,
          meta: {
            total: collection.total_count,
            pages: collection.total_pages
          },
          links: {
            self: url_for(params.to_unsafe_h.merge(page: collection.current_page)),
            first: url_for(params.to_unsafe_h.merge(page: 1)),
            last: url_for(params.to_unsafe_h.merge(page: collection.total_pages))
          }
        }

        if !collection.out_of_range? && !collection.first_page?
          options[:links][:prev] = url_for(params.to_unsafe_h.merge(page: collection.prev_page))
        end
        if !collection.out_of_range? && !collection.last_page?
          options[:links][:next] = url_for(params.to_unsafe_h.merge(page: collection.next_page))
        end

        options
      end
    end
  end
end

Version data entries

16 entries across 16 versions & 1 rubygems

Version Path
eivo-rails-api-0.1.13 app/controllers/eivo/concerns/pagination.rb
eivo-rails-api-0.1.12 app/controllers/eivo/concerns/pagination.rb
eivo-rails-api-0.1.11 app/controllers/eivo/concerns/pagination.rb
eivo-rails-api-0.1.10 app/controllers/eivo/concerns/pagination.rb
eivo-rails-api-0.1.9 app/controllers/eivo/concerns/pagination.rb
eivo-rails-api-0.1.8 app/controllers/eivo/concerns/pagination.rb
eivo-rails-api-0.1.7 app/controllers/eivo/concerns/pagination.rb
eivo-rails-api-0.1.6 app/controllers/eivo/concerns/pagination.rb
eivo-rails-api-0.1.5 app/controllers/eivo/concerns/pagination.rb
eivo-rails-api-0.1.4 app/controllers/eivo/concerns/pagination.rb
eivo-rails-api-0.1.3 app/controllers/eivo/concerns/pagination.rb
eivo-rails-api-0.1.2 app/controllers/eivo/concerns/pagination.rb
eivo-rails-api-0.1.1 app/controllers/eivo/concerns/pagination.rb
eivo-rails-api-0.1.0 app/controllers/eivo/concerns/pagination.rb
eivo-rails-api-0.0.9 app/controllers/eivo/concerns/pagination.rb
eivo-rails-api-0.0.8 app/controllers/eivo/concerns/pagination.rb