Module: Wor::Paginate

Defined in:
lib/wor/paginate.rb,
lib/wor/paginate/config.rb,
lib/wor/paginate/version.rb,
lib/wor/paginate/paginate.rb,
lib/wor/paginate/adapters/base.rb,
lib/wor/paginate/adapters/pagy.rb,
lib/wor/paginate/formatters/base.rb,
lib/wor/paginate/utils/uri_helper.rb,
lib/wor/paginate/adapters/kaminari.rb,
lib/wor/paginate/adapters/enumerable.rb,
lib/wor/paginate/utils/preserve_modes.rb,
lib/wor/paginate/adapters/active_record.rb,
lib/wor/paginate/adapters/will_paginate.rb,
lib/wor/paginate/formatters/ams_formatter.rb,
lib/wor/paginate/formatters/panko_formatter.rb,
lib/wor/paginate/exceptions/dependency_error.rb,
lib/generators/wor/paginate/install_generator.rb,
lib/wor/paginate/adapters/helpers/total_count.rb,
lib/wor/paginate/utils/preserve_records_helper.rb,
lib/wor/paginate/exceptions/invalid_page_number.rb,
lib/wor/paginate/exceptions/invalid_limit_number.rb,
lib/wor/paginate/exceptions/no_pagination_adapter.rb,
lib/wor/paginate/adapters/kaminari_already_paginated.rb,
lib/wor/paginate/adapters/will_paginate_already_paginated.rb

Defined Under Namespace

Modules: Adapters, Config, Exceptions, Formatters, Generators, Utils

Constant Summary collapse

VERSION =
'0.5.0'.freeze

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.configure {|Config| ... } ⇒ Object



21
22
23
24
25
26
27
# File 'lib/wor/paginate.rb', line 21

def self.configure
  yield Config

  return if Config.adapters.any? || Config.default_adapter.present?

  raise Exceptions::NoPaginationAdapter
end

Instance Method Details

#find_adapter_for_content(content, options) ⇒ Object



33
34
35
36
37
38
39
40
# File 'lib/wor/paginate/paginate.rb', line 33

def find_adapter_for_content(content, options)
  return instance_adapter(options[:adapter], content, options) unless options[:adapter].nil?

  adapters = []
  adapters << Config.default_adapter if Config.default_adapter.present?
  adapters += Config.adapters
  adapters.map { |adapter| instance_adapter(adapter, content, options) }.find(&:adapt?)
end

#formatter_class(options) ⇒ Object



29
30
31
# File 'lib/wor/paginate/paginate.rb', line 29

def formatter_class(options)
  options[:formatter].presence || Config.formatter
end

#includes?(options) ⇒ Boolean

Returns:

  • (Boolean)


62
63
64
# File 'lib/wor/paginate/paginate.rb', line 62

def includes?(options)
  !options[:include].nil?
end

#instance_adapter(adapter, content, options) ⇒ Object



42
43
44
# File 'lib/wor/paginate/paginate.rb', line 42

def instance_adapter(adapter, content, options)
  adapter.new(content, page(options), limit(options))
end

#limit(options) ⇒ Object



66
67
68
69
70
71
# File 'lib/wor/paginate/paginate.rb', line 66

def limit(options)
  [
    option_max_limit(options) || Config.max_limit,
    option_limit(options) || param_limit || Config.default_per_page
  ].min
end

#option_limit(options) ⇒ Object



50
51
52
# File 'lib/wor/paginate/paginate.rb', line 50

def option_limit(options)
  options[:limit]&.to_i
end

#option_max_limit(options) ⇒ Object



54
55
56
# File 'lib/wor/paginate/paginate.rb', line 54

def option_max_limit(options)
  options[:max_limit]&.to_i
end

#page(options) ⇒ Object



46
47
48
# File 'lib/wor/paginate/paginate.rb', line 46

def page(options)
  options[:page] || params[Config.page_param] || Config.default_page
end

#paginate(content, options = {}, &block) ⇒ Object



11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/wor/paginate/paginate.rb', line 11

def paginate(content, options = {}, &block)
  current_url = request.original_url
  if (preserve_records = options[:preserve_records])
    content, current_url = Wor::Paginate::Utils::PreserveRecordsHelper
                           .new(content, current_url,
                                preserve_records.is_a?(Hash) ? preserve_records : {}).call
  end
  adapter = find_adapter_for_content(content, options)
  raise Exceptions::NoPaginationAdapter if adapter.blank?

  merged = options.merge(_current_url: current_url)
  formatter_class(options).new(adapter, merged, &block).format
end

#param_limitObject



58
59
60
# File 'lib/wor/paginate/paginate.rb', line 58

def param_limit
  params[Config.per_page_param]&.to_i
end

#render_paginate_with_include(content, options, &block) ⇒ Object



25
26
27
# File 'lib/wor/paginate/paginate.rb', line 25

def render_paginate_with_include(content, options, &block)
  render json: paginate(content, options, &block), include: options[:include]
end

#render_paginated(content, options = {}, &block) ⇒ Object



5
6
7
8
9
# File 'lib/wor/paginate/paginate.rb', line 5

def render_paginated(content, options = {}, &block)
  return render_paginate_with_include(content, options, &block) if includes?(options)

  render json: paginate(content, options, &block)
end