pagy 5.6.3 → 5.6.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/config/pagy.rb +1 -1
- data/lib/javascripts/pagy.js +1 -135
- data/lib/pagy/backend.rb +1 -1
- data/lib/pagy/calendar.rb +2 -2
- data/lib/pagy/extras/arel.rb +3 -0
- data/lib/pagy/extras/array.rb +1 -1
- data/lib/pagy/extras/calendar.rb +4 -2
- data/lib/pagy/extras/frontend_helpers.rb +1 -1
- data/lib/pagy/extras/i18n.rb +2 -2
- data/lib/pagy/frontend.rb +1 -1
- data/lib/pagy/i18n.rb +2 -1
- data/lib/pagy.rb +5 -4
- metadata +8 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0d1bf851d5e0ceba5250106974dc79d90346224bd25b149e28f78c307980ad90
|
4
|
+
data.tar.gz: fd0c607bf907c917b0aa637c08c7f773d0a403b6662738f59e23e0aa197f6f49
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6b971d9c936a082e73dab19ceb624be6a041e1e8646a3d88d5742ddd93d2fa701669e7dae8ee13450397e4dcc9a2c921788c081aaa545fddb628e975bb669661
|
7
|
+
data.tar.gz: 4e2d4ccd5a85264e2b4b85319ccbac120139ea2f1cbadb6a4bb35740e44498027cc353c1aa9ea03f9a6adc6ece776353f879c85745b0c1941b5005b344592537
|
data/lib/config/pagy.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# Pagy initializer file (5.6.
|
3
|
+
# Pagy initializer file (5.6.7)
|
4
4
|
# Customize only what you really need and notice that the core Pagy works also without any of the following lines.
|
5
5
|
# Should you just cherry pick part of this file, please maintain the require-order of the extras
|
6
6
|
|
data/lib/javascripts/pagy.js
CHANGED
@@ -1,135 +1 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
// This code should be OK also with very old browsers
|
4
|
-
|
5
|
-
// Container of the whole pagy stuff
|
6
|
-
function Pagy(){}
|
7
|
-
|
8
|
-
Pagy.version = '5.6.3'
|
9
|
-
|
10
|
-
// Used by the waitForMe function
|
11
|
-
Pagy.delay = 100
|
12
|
-
|
13
|
-
// Scan the target for data-pagy-json elements and apply their functions
|
14
|
-
Pagy.init =
|
15
|
-
function(arg) {
|
16
|
-
var target = arg instanceof Event || arg === undefined ? document : arg,
|
17
|
-
elements = target.querySelectorAll('[data-pagy-json]')
|
18
|
-
for (var i = 0, len = elements.length; i < len; i++) {
|
19
|
-
var args = JSON.parse(elements[i].getAttribute('data-pagy-json')),
|
20
|
-
fname = args.shift()
|
21
|
-
args.unshift(elements[i])
|
22
|
-
Pagy[fname].apply(null, args)
|
23
|
-
}
|
24
|
-
}
|
25
|
-
|
26
|
-
// Power the pagy*_nav_js helpers
|
27
|
-
Pagy.nav =
|
28
|
-
function(pagyEl, tags, sequels, label_sequels, trimParam ) {
|
29
|
-
label_sequels = (label_sequels === null) ? sequels : label_sequels
|
30
|
-
var widths = [], lastWidth,
|
31
|
-
fill = function(string, item, label) { return string.replace(/__pagy_page__/g, item)
|
32
|
-
.replace(/__pagy_label__/g, label) }
|
33
|
-
for (var width in sequels) {
|
34
|
-
if (sequels.hasOwnProperty(width)) { widths.push(parseInt(width, 10)) }
|
35
|
-
}
|
36
|
-
widths.sort(function(a, b) { return b - a })
|
37
|
-
|
38
|
-
pagyEl.render =
|
39
|
-
function() {
|
40
|
-
var width, i, len
|
41
|
-
for (i = 0, len = widths.length; i < len; i++) {
|
42
|
-
if (this.parentElement.clientWidth > widths[i]) { width = widths[i]; break }
|
43
|
-
}
|
44
|
-
if (width !== lastWidth) {
|
45
|
-
var html = tags.before,
|
46
|
-
series = sequels[width],
|
47
|
-
labels = label_sequels[width]
|
48
|
-
for (i = 0, len = series.length; i < len; i++) {
|
49
|
-
var item = series[i],
|
50
|
-
label = labels[i]
|
51
|
-
if (typeof(trimParam) === 'string' && item === 1) { html += Pagy.trim(fill(tags.link, item, label), trimParam) }
|
52
|
-
else if (typeof(item) === 'number') { html += fill(tags.link, item, label) }
|
53
|
-
else if (item === 'gap') { html += tags.gap }
|
54
|
-
else if (typeof(item) === 'string') { html += fill(tags.active, item, label) }
|
55
|
-
}
|
56
|
-
html += tags.after
|
57
|
-
this.insertAdjacentHTML('afterbegin', html)
|
58
|
-
lastWidth = width
|
59
|
-
}
|
60
|
-
}.bind(pagyEl)
|
61
|
-
pagyEl.render()
|
62
|
-
}
|
63
|
-
|
64
|
-
// Power the pagy*_combo_nav_js helpers
|
65
|
-
Pagy.combo_nav =
|
66
|
-
function(pagyEl, page, link, trimParam) {
|
67
|
-
var input = pagyEl.getElementsByTagName('input')[0],
|
68
|
-
toPage =
|
69
|
-
function() {
|
70
|
-
if (page !== input.value) {
|
71
|
-
var html = link.replace(/__pagy_page__/, input.value)
|
72
|
-
if (typeof (trimParam) === 'string' && input.value === '1') { html = Pagy.trim(html, trimParam) }
|
73
|
-
pagyEl.insertAdjacentHTML('afterbegin', html)
|
74
|
-
pagyEl.getElementsByTagName('a')[0].click()
|
75
|
-
}
|
76
|
-
}
|
77
|
-
Pagy.addInputEventListeners(input, toPage)
|
78
|
-
}
|
79
|
-
|
80
|
-
// Power the pagy_items_selector_js helper
|
81
|
-
Pagy.items_selector =
|
82
|
-
function(pagyEl, from, link, param) {
|
83
|
-
var input = pagyEl.getElementsByTagName('input')[0],
|
84
|
-
current = input.value,
|
85
|
-
toPage =
|
86
|
-
function() {
|
87
|
-
var items = input.value
|
88
|
-
if (items === 0 || items === '') { return }
|
89
|
-
if (current !== items) {
|
90
|
-
var page = Math.max(Math.ceil(from / items), 1),
|
91
|
-
html = link.replace(/__pagy_page__/, page).replace(/__pagy_items__/, items)
|
92
|
-
if (typeof (param) === 'string' && page === 1) { html = Pagy.trim(html, param) }
|
93
|
-
pagyEl.insertAdjacentHTML('afterbegin', html)
|
94
|
-
pagyEl.getElementsByTagName('a')[0].click()
|
95
|
-
}
|
96
|
-
}
|
97
|
-
Pagy.addInputEventListeners(input, toPage)
|
98
|
-
}
|
99
|
-
|
100
|
-
// Utility for input fields
|
101
|
-
Pagy.addInputEventListeners =
|
102
|
-
function(input, toPage) {
|
103
|
-
// select the content on click: easier for typing a number
|
104
|
-
input.addEventListener('click', function() { this.select() })
|
105
|
-
// toPage when the input looses focus
|
106
|
-
input.addEventListener('focusout', toPage)
|
107
|
-
// … and when pressing enter inside the input
|
108
|
-
input.addEventListener('keyup', function(e) { if (e.which === 13) {toPage()} }.bind(this))
|
109
|
-
}
|
110
|
-
|
111
|
-
// Power the trim extra for js helpers
|
112
|
-
Pagy.trim =
|
113
|
-
function(html, param) {
|
114
|
-
var re = new RegExp('[?&]' + param + '=1\\b(?!&)|\\b' + param + '=1&')
|
115
|
-
return html.replace(re, '')
|
116
|
-
}
|
117
|
-
|
118
|
-
// Render all *nav_js helpers
|
119
|
-
Pagy.renderNavs =
|
120
|
-
function() {
|
121
|
-
var navs = document.getElementsByClassName('pagy-njs') // 'pagy-njs' is common to all *nav_js helpers
|
122
|
-
for (var i = 0, len = navs.length; i < len; i++) { navs[i].render() }
|
123
|
-
}
|
124
|
-
|
125
|
-
// Throttle to avoid to fire multiple time the renderNavs on resize
|
126
|
-
Pagy.waitForMe =
|
127
|
-
function() {
|
128
|
-
if (typeof(Pagy.tid) === 'number') { clearTimeout(Pagy.tid) }
|
129
|
-
Pagy.tid = setTimeout(Pagy.renderNavs, Pagy.delay)
|
130
|
-
}
|
131
|
-
|
132
|
-
// If there is a window object then add the event listener on resize
|
133
|
-
if (typeof window !== 'undefined') {
|
134
|
-
window.addEventListener('resize', Pagy.waitForMe, true)
|
135
|
-
}
|
1
|
+
"use strict";function _toConsumableArray(a){return _arrayWithoutHoles(a)||_iterableToArray(a)||_unsupportedIterableToArray(a)||_nonIterableSpread()}function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _iterableToArray(a){if("undefined"!=typeof Symbol&&null!=a[Symbol.iterator]||null!=a["@@iterator"])return Array.from(a)}function _arrayWithoutHoles(a){if(Array.isArray(a))return _arrayLikeToArray(a)}function _createForOfIteratorHelper(a,b){var c="undefined"!=typeof Symbol&&a[Symbol.iterator]||a["@@iterator"];if(!c){if(Array.isArray(a)||(c=_unsupportedIterableToArray(a))||b&&a&&"number"==typeof a.length){c&&(a=c);var d=0,e=function(){};return{s:e,n:function n(){return d>=a.length?{done:!0}:{done:!1,value:a[d++]}},e:function e(a){throw a},f:e}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var f,g=!0,h=!1;return{s:function s(){c=c.call(a)},n:function n(){var a=c.next();return g=a.done,a},e:function e(a){h=!0,f=a},f:function f(){try{g||null==c["return"]||c["return"]()}finally{if(h)throw f}}}}function _unsupportedIterableToArray(a,b){if(a){if("string"==typeof a)return _arrayLikeToArray(a,b);var c=Object.prototype.toString.call(a).slice(8,-1);return"Object"===c&&a.constructor&&(c=a.constructor.name),"Map"===c||"Set"===c?Array.from(a):"Arguments"===c||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(c)?_arrayLikeToArray(a,b):void 0}}function _arrayLikeToArray(a,b){(null==b||b>a.length)&&(b=a.length);for(var c=0,d=Array(b);c<b;c++)d[c]=a[c];return d}var Pagy={version:"5.6.7",init:function init(a){var b,c=a instanceof HTMLElement?a:document,d=c.querySelectorAll("[data-pagy-json]"),e=_createForOfIteratorHelper(d);try{for(e.s();!(b=e.n()).done;){var f=b.value,g=f.getAttribute("data-pagy-json");if(null!==g){var h=JSON.parse(g),i=h.shift();"nav"===i?Pagy.nav.apply(Pagy,[f].concat(_toConsumableArray(h))):"combo_nav"===i?Pagy.combo_nav.apply(Pagy,[f].concat(_toConsumableArray(h))):"items_selector"===i&&Pagy.items_selector.apply(Pagy,[f].concat(_toConsumableArray(h)))}}}catch(a){e.e(a)}finally{e.f()}},nav:function nav(a,b,c,d,e){var f={};if(null===d)for(var k in c)f[k]=c[k].map(function(a){return a.toString()});else f=d;var g,h=Object.getOwnPropertyNames(c).map(function(a){return parseInt(a)}).sort(function(c,a){return a-c}),j=function(a,b,c){return a.replace(/__pagy_page__/g,b).replace(/__pagy_label__/g,c)};a.pagyRender=function(){var a,d=0,k=_createForOfIteratorHelper(h);try{for(k.s();!(a=k.n()).done;){var q=a.value;if(null!==this.parentElement&&this.parentElement.clientWidth>q){d=q;break}}}catch(a){k.e(a)}finally{k.f()}if(d!==g){var l=b.before,m=c[d.toString()],n=f[d.toString()];for(var r in m){var o=m[r],p=n[r];if("string"==typeof e&&1===o){var i=j(b.link,o.toString(),p);l+=Pagy.trim(i,e)}else l+="number"==typeof o?j(b.link,o.toString(),p):"gap"===o?b.gap:j(b.active,o,p)}l+=b.after,this.innerHTML="",this.insertAdjacentHTML("afterbegin",l),g=d}}.bind(a),a.pagyRender(),"undefined"!=typeof window&&window.addEventListener("resize",Pagy.throttleRenderNavs,!0)},throttleRenderNavsTID:0,throttleRenderNavsDelay:100,throttleRenderNavs:function throttleRenderNavs(){clearTimeout(Pagy.throttleRenderNavsTID),Pagy.throttleRenderNavsTID=setTimeout(Pagy.renderNavs,Pagy.throttleRenderNavsDelay)},renderNavs:function renderNavs(){var a,b=document.getElementsByClassName("pagy-njs"),c=_createForOfIteratorHelper(b);try{for(c.s();!(a=c.n()).done;){var d=a.value;d.pagyRender()}}catch(a){c.e(a)}finally{c.f()}},combo_nav:function combo_nav(a,b,c,d){var e=a.getElementsByTagName("input")[0];Pagy.addInputBehavior(e,function goToPage(){if(b!==e.value){var f=c.replace(/__pagy_page__/,e.value);"string"==typeof d&&"1"===e.value&&(f=Pagy.trim(f,d)),a.insertAdjacentHTML("afterbegin",f),a.getElementsByTagName("a")[0].click()}})},trim:function trim(a,b){var c=new RegExp("[?&]".concat(b,"=1\\b(?!&)|\\b").concat(b,"=1&"));return a.replace(c,"")},items_selector:function items_selector(a,b,c,d){var e=a.getElementsByTagName("input")[0],f=e.value;Pagy.addInputBehavior(e,function goToPage(){var g=Math.max,h=Math.ceil,i=e.value;if("0"!==i&&""!==i&&f!==i){var j=g(h(b/parseInt(i)),1).toString(),k=c.replace(/__pagy_page__/,j).replace(/__pagy_items__/,i);"string"==typeof d&&"1"===j&&(k=Pagy.trim(k,d)),a.insertAdjacentHTML("afterbegin",k),a.getElementsByTagName("a")[0].click()}})},addInputBehavior:function addInputBehavior(a,b){a.addEventListener("click",function(){this.select()}),a.addEventListener("focusout",function(){b()}),a.addEventListener("keypress",function(a){"Enter"===a.key&&b()}.bind(this))}};
|
data/lib/pagy/backend.rb
CHANGED
data/lib/pagy/calendar.rb
CHANGED
@@ -41,7 +41,7 @@ class Pagy # :nodoc:
|
|
41
41
|
|
42
42
|
protected
|
43
43
|
|
44
|
-
# Base class method for the setup of the unit variables
|
44
|
+
# Base class method for the setup of the unit variables (subclasses must implement it and call super)
|
45
45
|
def setup_unit_vars
|
46
46
|
raise VariableError.new(self, :format, 'to be a strftime format', @vars[:format]) unless @vars[:format].is_a?(String)
|
47
47
|
raise VariableError.new(self, :order, 'to be in [:asc, :desc]', @order) \
|
@@ -85,6 +85,6 @@ class Pagy # :nodoc:
|
|
85
85
|
end
|
86
86
|
end
|
87
87
|
end
|
88
|
-
|
88
|
+
# Require the subclass files in UNITS (no custom unit at this point yet)
|
89
89
|
Calendar::UNITS.each { |unit| require "pagy/calendar/#{unit}" }
|
90
90
|
end
|
data/lib/pagy/extras/arel.rb
CHANGED
@@ -6,11 +6,13 @@ class Pagy # :nodoc:
|
|
6
6
|
module ArelExtra
|
7
7
|
private
|
8
8
|
|
9
|
+
# Return Pagy object and paginated collection/results
|
9
10
|
def pagy_arel(collection, vars = {})
|
10
11
|
pagy = Pagy.new(pagy_arel_get_vars(collection, vars))
|
11
12
|
[pagy, pagy_get_items(collection, pagy)]
|
12
13
|
end
|
13
14
|
|
15
|
+
# Sub-method called only by #pagy_arel: here for easy customization of variables by overriding
|
14
16
|
def pagy_arel_get_vars(collection, vars)
|
15
17
|
pagy_set_items_from_params(vars) if defined?(ItemsExtra)
|
16
18
|
vars[:count] ||= pagy_arel_count(collection)
|
@@ -18,6 +20,7 @@ class Pagy # :nodoc:
|
|
18
20
|
vars
|
19
21
|
end
|
20
22
|
|
23
|
+
# Count using Arel when grouping
|
21
24
|
def pagy_arel_count(collection)
|
22
25
|
if collection.group_values.empty?
|
23
26
|
# COUNT(*)
|
data/lib/pagy/extras/array.rb
CHANGED
data/lib/pagy/extras/calendar.rb
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
require 'pagy/calendar'
|
5
5
|
|
6
6
|
class Pagy # :nodoc:
|
7
|
-
#
|
7
|
+
# Add pagination filtering by calendar unit (:year, :quarter, :month, :week, :day) to the regular pagination
|
8
8
|
module CalendarExtra
|
9
9
|
# Additions for the Backend module
|
10
10
|
module Backend
|
@@ -26,7 +26,9 @@ class Pagy # :nodoc:
|
|
26
26
|
|
27
27
|
# Setup and return the calendar objects and the filtered collection
|
28
28
|
def pagy_setup_calendar(collection, conf)
|
29
|
-
units
|
29
|
+
units = Calendar::UNITS & conf.keys # get the units in time length desc order
|
30
|
+
raise ArgumentError, 'no calendar unit found in pagy_calendar configuration' if units.empty?
|
31
|
+
|
30
32
|
page_param = conf[:pagy][:page_param] || DEFAULT[:page_param]
|
31
33
|
units.each do |unit| # set all the :page_param vars for later deletion
|
32
34
|
unit_page_param = :"#{unit}_#{page_param}"
|
@@ -18,7 +18,7 @@ class Pagy # :nodoc:
|
|
18
18
|
# "350" => [1, 2, :gap, 17, 18, 19, "20", 21, 22, 23, :gap, 49, 50],
|
19
19
|
# "550" => [1, 2, 3, :gap, 16, 17, 18, 19, "20", 21, 22, 23, 24, :gap, 48, 49, 50] }
|
20
20
|
# Notice: if :steps is false it will use the single {0 => @vars[:size]} size
|
21
|
-
def sequels(steps: @vars[:steps] || { 0 => @vars[:size] })
|
21
|
+
def sequels(steps: @vars[:steps] || { 0 => @vars[:size] }, **_)
|
22
22
|
raise VariableError.new(self, :steps, 'to define the 0 width', steps) unless steps.key?(0)
|
23
23
|
|
24
24
|
{}.tap do |sequels|
|
data/lib/pagy/extras/i18n.rb
CHANGED
@@ -4,14 +4,14 @@
|
|
4
4
|
class Pagy # :nodoc:
|
5
5
|
# Use ::I18n gem
|
6
6
|
module I18nExtra
|
7
|
-
# Frontend overriding
|
7
|
+
# Frontend overriding for translation
|
8
8
|
module Frontend
|
9
9
|
def pagy_t(key, **opts)
|
10
10
|
::I18n.t(key, **opts)
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
14
|
-
# Calendar overriding
|
14
|
+
# Calendar overriding for localization (see also the block in the calendar section of the config/pagy.rb initializer)
|
15
15
|
module Calendar
|
16
16
|
def localize(time, opts)
|
17
17
|
::I18n.l(time, **opts)
|
data/lib/pagy/frontend.rb
CHANGED
@@ -77,7 +77,7 @@ class Pagy
|
|
77
77
|
# Similar to I18n.t: just ~18x faster using ~10x less memory
|
78
78
|
# (@pagy_locale explicitly initialized in order to avoid warning)
|
79
79
|
def pagy_t(key, opts = {})
|
80
|
-
Pagy::I18n.
|
80
|
+
Pagy::I18n.translate(@pagy_locale ||= nil, key, opts)
|
81
81
|
end
|
82
82
|
end
|
83
83
|
end
|
data/lib/pagy/i18n.rb
CHANGED
@@ -153,11 +153,12 @@ class Pagy
|
|
153
153
|
end
|
154
154
|
|
155
155
|
# Translate and pluralize the key with the locale DATA
|
156
|
-
def
|
156
|
+
def translate(locale, key, opts = {})
|
157
157
|
data, pluralize = DATA[locale]
|
158
158
|
translation = data[key] || (opts[:count] && data[key += ".#{pluralize.call(opts[:count])}"]) \
|
159
159
|
or return %([translation missing: "#{key}"])
|
160
160
|
translation.gsub(/%{[^}]+?}/) { |match| opts[:"#{match[2..-2]}"] || match }
|
161
161
|
end
|
162
|
+
alias t translate
|
162
163
|
end
|
163
164
|
end
|
data/lib/pagy.rb
CHANGED
@@ -5,7 +5,7 @@ require 'pathname'
|
|
5
5
|
|
6
6
|
# Core class
|
7
7
|
class Pagy
|
8
|
-
VERSION = '5.6.
|
8
|
+
VERSION = '5.6.7'
|
9
9
|
|
10
10
|
# Root pathname to get the path of Pagy files like templates or dictionaries
|
11
11
|
def self.root
|
@@ -44,7 +44,7 @@ class Pagy
|
|
44
44
|
end
|
45
45
|
|
46
46
|
# Return the array of page numbers and :gap items e.g. [1, :gap, 7, 8, "9", 10, 11, :gap, 36]
|
47
|
-
def series(size: @vars[:size])
|
47
|
+
def series(size: @vars[:size], **_)
|
48
48
|
return [] if size.empty?
|
49
49
|
raise VariableError.new(self, :size, 'to contain 4 items >= 0', size) \
|
50
50
|
unless size.is_a?(Array) && size.size == 4 && size.all? { |num| !num.negative? rescue false } # rubocop:disable Style/RescueModifier
|
@@ -59,11 +59,11 @@ class Pagy
|
|
59
59
|
series = []
|
60
60
|
start = 1
|
61
61
|
if (left_gap_end - left_gap_start).positive?
|
62
|
-
series.push(*start
|
62
|
+
series.push(*start...left_gap_start, :gap)
|
63
63
|
start = left_gap_end + 1
|
64
64
|
end
|
65
65
|
if (right_gap_end - right_gap_start).positive?
|
66
|
-
series.push(*start
|
66
|
+
series.push(*start...right_gap_start, :gap)
|
67
67
|
start = right_gap_end + 1
|
68
68
|
end
|
69
69
|
series.push(*start..@last)
|
@@ -76,6 +76,7 @@ class Pagy
|
|
76
76
|
page.to_s
|
77
77
|
end
|
78
78
|
|
79
|
+
# Allow the customization of the output (overridden by the calendar extra)
|
79
80
|
def label
|
80
81
|
@page.to_s
|
81
82
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pagy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.6.
|
4
|
+
version: 5.6.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Domizio Demichelis
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-12-30 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Agnostic pagination in plain ruby. It does it all. Better.
|
14
14
|
email:
|
@@ -111,6 +111,11 @@ licenses:
|
|
111
111
|
- MIT
|
112
112
|
metadata:
|
113
113
|
rubygems_mfa_required: 'true'
|
114
|
+
homepage_uri: https://github.com/ddneus/pagy
|
115
|
+
documentation_uri: https://ddnexus.github.io/pagy
|
116
|
+
bug_tracker_uri: https://github.com/ddnexus/pagy/issues
|
117
|
+
changelog_uri: https://github.com/ddnexus/pagy/blob/master/CHANGELOG.md
|
118
|
+
live_support: https://gitter.im/ruby-pagy/Lobby
|
114
119
|
post_install_message:
|
115
120
|
rdoc_options: []
|
116
121
|
require_paths:
|
@@ -126,7 +131,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
126
131
|
- !ruby/object:Gem::Version
|
127
132
|
version: '0'
|
128
133
|
requirements: []
|
129
|
-
rubygems_version: 3.2.
|
134
|
+
rubygems_version: 3.2.32
|
130
135
|
signing_key:
|
131
136
|
specification_version: 4
|
132
137
|
summary: The kick-ass pagination ruby gem
|