Module: Zaikio::Client::Helpers::Pagination

Extended by:
ActiveSupport::Concern
Included in:
Model
Defined in:
lib/zaikio/client/helpers/pagination.rb

Defined Under Namespace

Modules: ClassMethods Classes: Relation

Constant Summary collapse

HEADERS =
{
  total_count: "Total-Count",
  total_pages: "Total-Pages",
  current_page: "Current-Page"
}.freeze
METADATA_KEY =
:pagination
FaradayMiddleware =

Faraday Middleware for extracting any pagination headers into the a top-level :metadata hash, or the env hash for non-JSON responses.

Examples:

Usage

conn = Faraday.new do |f|
  f.use Zaikio::Client::Helpers::Pagination::FaradayMiddleware
end

response = conn.get("/")
response.env[METADATA_KEY]
#=> {total_count: 4, total_pages: 1, current_page: 1}
Class.new(superclass) do
  def on_complete(env)
    @env = env

     = HEADERS.transform_values do |key|
      header(key)
    end

    if env.body.is_a?(Hash)
      @env.body[:metadata] ||= {}
      @env.body[:metadata][METADATA_KEY] = 
    else
      @env[METADATA_KEY] = 
    end
  end

  private

  def header(key)
    value = @env.response_headers[key]
    value.try(:to_i)
  end
end