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/formatter.rb,
lib/wor/paginate/adapters/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/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, Generators, Utils
Classes: Formatter
Constant Summary
collapse
- VERSION =
'0.2.0'.freeze
- ADAPTERS =
The order of this array is important! In a future release we’ll provide an interface to manipulate it
[
Adapters::KaminariAlreadyPaginated,
Adapters::WillPaginateAlreadyPaginated,
Adapters::WillPaginate,
Adapters::Kaminari,
Adapters::ActiveRecord,
Adapters::Enumerable
].freeze
Class Method Summary
collapse
Instance Method Summary
collapse
Instance Method Details
#find_adapter_for_content(content, options) ⇒ Object
46
47
48
49
50
51
52
|
# File 'lib/wor/paginate/paginate.rb', line 46
def find_adapter_for_content(content, options)
adapters = []
adapters << Config.default_adapter if Config.default_adapter.present?
adapters += ADAPTERS
adapters.map { |adapter| adapter.new(content, page(options), limit(options)) }
.find(&:adapt?)
end
|
42
43
44
|
# File 'lib/wor/paginate/paginate.rb', line 42
def formatter_class(options)
options[:formatter].presence || Formatter
end
|
#includes?(options) ⇒ Boolean
70
71
72
|
# File 'lib/wor/paginate/paginate.rb', line 70
def includes?(options)
!options[:include].nil?
end
|
#limit(options) ⇒ Object
74
75
76
77
78
79
|
# File 'lib/wor/paginate/paginate.rb', line 74
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
58
59
60
|
# File 'lib/wor/paginate/paginate.rb', line 58
def option_limit(options)
options[:limit]&.to_i
end
|
#option_max_limit(options) ⇒ Object
62
63
64
|
# File 'lib/wor/paginate/paginate.rb', line 62
def option_max_limit(options)
options[:max_limit]&.to_i
end
|
#page(options) ⇒ Object
54
55
56
|
# File 'lib/wor/paginate/paginate.rb', line 54
def page(options)
options[:page] || params[Config.page_param] || Config.default_page
end
|
#paginate(content, options = {}) ⇒ Object
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
# File 'lib/wor/paginate/paginate.rb', line 22
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_limit ⇒ Object
66
67
68
|
# File 'lib/wor/paginate/paginate.rb', line 66
def param_limit
params[Config.per_page_param]&.to_i
end
|
#render_paginate_with_include(content, options) ⇒ Object
38
39
40
|
# File 'lib/wor/paginate/paginate.rb', line 38
def render_paginate_with_include(content, options)
render json: paginate(content, options), include: options[:include]
end
|
#render_paginated(content, options = {}) ⇒ Object
16
17
18
19
20
|
# File 'lib/wor/paginate/paginate.rb', line 16
def render_paginated(content, options = {})
return render_paginate_with_include(content, options) if includes?(options)
render json: paginate(content, options)
end
|