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/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.3.0'.freeze

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

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



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

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



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

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



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

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

#includes?(options) ⇒ Boolean

Returns:

  • (Boolean)


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

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

#instance_adapter(adapter, content, options) ⇒ Object



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

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

#limit(options) ⇒ Object



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

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



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

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

#option_max_limit(options) ⇒ Object



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

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

#page(options) ⇒ Object



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

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

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



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

def paginate(content, options = {})
  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?

  formatter_class(options).new(adapter, options.merge(_current_url: current_url)).format
end

#param_limitObject



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

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

#render_paginate_with_include(content, options) ⇒ Object



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

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

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



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

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

  render json: paginate(content, options)
end