Class: Pagy::Request

Inherits:
Object
  • Object
show all
Defined in:
lib/pagy/classes/request.rb

Overview

Decouple the request from the env, allowing non-rack apps to use pagy by passing a hash. Resolve the :page and :limit options from params.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options) ⇒ Request

Returns a new instance of Request.



7
8
9
10
11
12
13
14
15
16
# File 'lib/pagy/classes/request.rb', line 7

def initialize(options)
  @options = options
  request  = @options[:request]
  @base_url, @path, @params, @cookie =
    if request.is_a?(Hash)
      request.values_at(:base_url, :path, :params, :cookie)
    else
      [request.base_url, request.path, get_params(request), request.cookies['pagy']]
    end
end

Instance Attribute Details

#base_urlObject (readonly)

Returns the value of attribute base_url.



18
19
20
# File 'lib/pagy/classes/request.rb', line 18

def base_url
  @base_url
end

Returns the value of attribute cookie.



18
19
20
# File 'lib/pagy/classes/request.rb', line 18

def cookie
  @cookie
end

#paramsObject (readonly)

Returns the value of attribute params.



18
19
20
# File 'lib/pagy/classes/request.rb', line 18

def params
  @params
end

#pathObject (readonly)

Returns the value of attribute path.



18
19
20
# File 'lib/pagy/classes/request.rb', line 18

def path
  @path
end

Instance Method Details

#resolve_limitObject



27
28
29
30
31
32
33
34
# File 'lib/pagy/classes/request.rb', line 27

def resolve_limit
  limit_key = @options[:limit_key] || DEFAULT[:limit_key]
  return @options[:limit] || DEFAULT[:limit] \
         unless @options[:client_max_limit] &&
                (requested_limit = @params.dig(@options[:root_key], limit_key) || @params[limit_key])

  [requested_limit.to_i, @options[:client_max_limit]].min
end

#resolve_page(force_integer: true) ⇒ Object



20
21
22
23
24
25
# File 'lib/pagy/classes/request.rb', line 20

def resolve_page(force_integer: true)
  page_key = @options[:page_key] || DEFAULT[:page_key]
  page     = @params.dig(@options[:root_key], page_key) || @params[page_key]
  page     = nil if page == ''   # fix for app-generated queries like ?page=
  force_integer ? (page || 1).to_i : page
end