pagy 3.1.0 → 3.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/config/pagy.rb +1 -1
- data/lib/javascripts/pagy.js +22 -20
- data/lib/pagy.rb +1 -1
- data/lib/pagy/extras/bootstrap.rb +2 -2
- data/lib/pagy/extras/bulma.rb +2 -2
- data/lib/pagy/extras/foundation.rb +2 -2
- data/lib/pagy/extras/items.rb +3 -3
- data/lib/pagy/extras/materialize.rb +2 -2
- data/lib/pagy/extras/navs.rb +2 -2
- data/lib/pagy/extras/semantic.rb +2 -2
- data/lib/pagy/extras/shared.rb +3 -5
- data/lib/pagy/extras/trim.rb +7 -18
- data/lib/pagy/frontend.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1c340603d318a1982f676209661b8357a2c386c93e6144c0f950dbad19645a23
|
4
|
+
data.tar.gz: 13bd39e2660aff66151c245801a8502320392cd0e62faf82f6042caf45e59603
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f2562e79aa12b299e2e4594d595255d3de4e401ef406c0b2a6228ab2924226905cd4531fbf9c0f563c3680f8e56ef0d13229b3a25be26e6c590cbc1073f9b944
|
7
|
+
data.tar.gz: 302da621bcf61a0a2ae97e4ed96d0e7477abec46d50bf3128ed850ff1edf1b5f88e6bcc3f79161907051f4015cf158e37a6bbcfd001609557decbd7569b979a1
|
data/lib/config/pagy.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
# frozen_string_literal: true
|
3
3
|
|
4
|
-
# Pagy initializer file (3.
|
4
|
+
# Pagy initializer file (3.2.0)
|
5
5
|
# Customize only what you really need and notice that Pagy works also without any of the following lines.
|
6
6
|
# Should you just cherry pick part of this file, please maintain the require-order of the extras
|
7
7
|
|
data/lib/javascripts/pagy.js
CHANGED
@@ -11,12 +11,12 @@ Pagy.init = function(arg){
|
|
11
11
|
}
|
12
12
|
};
|
13
13
|
|
14
|
-
Pagy.nav = function(id, tags, sequels){
|
14
|
+
Pagy.nav = function(id, tags, sequels, param){
|
15
15
|
var pagyEl = document.getElementById(id),
|
16
16
|
container = pagyEl.parentElement,
|
17
17
|
lastWidth = undefined,
|
18
18
|
timeoutId = 0,
|
19
|
-
|
19
|
+
pageREg = new RegExp(/__pagy_page__/g),
|
20
20
|
widths = [];
|
21
21
|
for (var width in sequels) { widths.push(parseInt(width)) } // fine with sequels structure
|
22
22
|
widths.sort(function(a, b){return b-a});
|
@@ -28,17 +28,18 @@ Pagy.nav = function(id, tags, sequels){
|
|
28
28
|
if (container.clientWidth > widths[i]) { width = widths[i]; break }
|
29
29
|
}
|
30
30
|
if (width !== lastWidth) {
|
31
|
-
while (pagyEl.firstChild) { pagyEl.removeChild(pagyEl.firstChild) }
|
32
31
|
var html = tags.before,
|
33
32
|
series = sequels[width];
|
34
33
|
for (i = 0, len = series.length; i < len; i++) {
|
35
34
|
var item = series[i];
|
36
|
-
if
|
37
|
-
else if (item === '
|
38
|
-
else if (
|
35
|
+
if (typeof(param) === 'string' && item === 1) { html += Pagy.trim(tags.link.replace(pageREg, item), param) }
|
36
|
+
else if (typeof(item) === 'number') { html += tags.link.replace(pageREg, item) }
|
37
|
+
else if (item === 'gap') { html += tags.gap }
|
38
|
+
else if (typeof(item) === 'string') { html += tags.active.replace(pageREg, item) }
|
39
39
|
}
|
40
40
|
html += tags.after;
|
41
|
-
pagyEl.
|
41
|
+
pagyEl.innerHTML = '';
|
42
|
+
pagyEl.insertAdjacentHTML('afterbegin', html);
|
42
43
|
lastWidth = width;
|
43
44
|
}
|
44
45
|
},
|
@@ -54,35 +55,31 @@ Pagy.nav = function(id, tags, sequels){
|
|
54
55
|
render();
|
55
56
|
};
|
56
57
|
|
57
|
-
Pagy.combo_nav = function(id, page,
|
58
|
+
Pagy.combo_nav = function(id, page, link, param){
|
58
59
|
var pagyEl = document.getElementById(id),
|
59
60
|
input = pagyEl.getElementsByTagName('input')[0],
|
60
61
|
go = function(){
|
61
62
|
if (page !== input.value) {
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
pagyEl.insertAdjacentHTML('afterbegin', links.standard.replace('--pagy.page--', input.value));
|
66
|
-
}
|
63
|
+
var html = link.replace(/__pagy_page__/, input.value);
|
64
|
+
if (typeof(param) === 'string' && input.value === '1') { html = Pagy.trim(html, param) }
|
65
|
+
pagyEl.insertAdjacentHTML('afterbegin', html);
|
67
66
|
pagyEl.getElementsByTagName('a')[0].click();
|
68
67
|
}
|
69
68
|
};
|
70
69
|
Pagy.addInputEventListeners(input, go);
|
71
70
|
};
|
72
71
|
|
73
|
-
Pagy.items_selector = function(id, from,
|
72
|
+
Pagy.items_selector = function(id, from, link, param){
|
74
73
|
var pagyEl = document.getElementById(id),
|
75
74
|
input = pagyEl.getElementsByTagName('input')[0],
|
76
75
|
current = input.value,
|
77
76
|
go = function(){
|
78
77
|
var items = input.value;
|
79
78
|
if (current !== items) {
|
80
|
-
var page = Math.max(Math.ceil(from / items),1)
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
pagyEl.insertAdjacentHTML('afterbegin', links.standard.replace('--pagy.page--', page).replace('--pagy.items--', items));
|
85
|
-
}
|
79
|
+
var page = Math.max(Math.ceil(from / items),1),
|
80
|
+
html = link.replace(/__pagy_page__/, page).replace(/__pagy_items__/, items);
|
81
|
+
if (typeof(param) === 'string' && page === 1){ html = Pagy.trim(html, param) }
|
82
|
+
pagyEl.insertAdjacentHTML('afterbegin', html);
|
86
83
|
pagyEl.getElementsByTagName('a')[0].click();
|
87
84
|
}
|
88
85
|
};
|
@@ -99,3 +96,8 @@ Pagy.addInputEventListeners = function(input, handler){
|
|
99
96
|
// … and when pressing enter inside the input
|
100
97
|
input.addEventListener('keyup', function(e){ if (e.which === 13) handler() }.bind(this));
|
101
98
|
};
|
99
|
+
|
100
|
+
Pagy.trim = function(html, param){
|
101
|
+
var re = new RegExp('[?&]' + param + '=1(?![&])|(?<=[?&])' + param + '=1&');
|
102
|
+
return html.replace(re, '');
|
103
|
+
};
|
data/lib/pagy.rb
CHANGED
@@ -34,7 +34,7 @@ class Pagy
|
|
34
34
|
'gap' => %(<li class="page-item gap disabled"><a href="#" class="page-link">#{pagy_t('pagy.nav.gap')}</a></li>),
|
35
35
|
'after' => p_next ? %(<li class="page-item next">#{link.call p_next, pagy_t('pagy.nav.next'), 'aria-label="next"'}</li></ul>)
|
36
36
|
: %(<li class="page-item next disabled"><a href="#" class="page-link">#{pagy_t('pagy.nav.next')}</a></li></ul>) }
|
37
|
-
%(<nav id="#{id}" class="pagy-bootstrap-nav-js pagination" role="navigation" aria-label="pager"></nav>#{pagy_json_tag(:nav, id, tags, pagy.sequels)})
|
37
|
+
%(<nav id="#{id}" class="pagy-bootstrap-nav-js pagination" role="navigation" aria-label="pager"></nav>#{pagy_json_tag(:nav, id, tags, pagy.sequels, defined?(TRIM) && pagy.vars[:page_param])})
|
38
38
|
end
|
39
39
|
|
40
40
|
# Javascript combo pagination for bootstrap: it returns a nav and a JSON tag used by the Pagy.combo_nav javascript
|
@@ -48,7 +48,7 @@ class Pagy
|
|
48
48
|
html << %(<div class="pagy-combo-input btn btn-primary disabled" style="white-space: nowrap;">#{pagy_t('pagy.combo_nav_js', page_input: input, count: p_page, pages: p_pages)}</div>)
|
49
49
|
html << (p_next ? link.call(p_next, pagy_t('pagy.nav.next'), 'aria-label="next" class="next btn btn-primary"')
|
50
50
|
: %(<a class="next btn btn-primary disabled" href="#">#{pagy_t('pagy.nav.next')}</a>))
|
51
|
-
html << %(</div></nav>#{pagy_json_tag(:combo_nav, id, p_page,
|
51
|
+
html << %(</div></nav>#{pagy_json_tag(:combo_nav, id, p_page, pagy_marked_link(link), defined?(TRIM) && pagy.vars[:page_param])})
|
52
52
|
end
|
53
53
|
|
54
54
|
end
|
data/lib/pagy/extras/bulma.rb
CHANGED
@@ -38,7 +38,7 @@ class Pagy
|
|
38
38
|
'active' => %(<li>#{link.call(MARK, MARK, %(class="pagination-link is-current" aria-current="page" aria-label="page #{MARK}"))}</li>),
|
39
39
|
'gap' => %(<li><span class="pagination-ellipsis">#{pagy_t('pagy.nav.gap')}</span></li>),
|
40
40
|
'after' => '</ul>' }
|
41
|
-
%(<nav id="#{id}" class="pagy-bulma-nav-js pagination is-centered" role="navigation" aria-label="pagination"></nav>#{pagy_json_tag(:nav, id, tags, pagy.sequels)})
|
41
|
+
%(<nav id="#{id}" class="pagy-bulma-nav-js pagination is-centered" role="navigation" aria-label="pagination"></nav>#{pagy_json_tag(:nav, id, tags, pagy.sequels, defined?(TRIM) && pagy.vars[:page_param])})
|
42
42
|
end
|
43
43
|
|
44
44
|
# Javascript combo pagination for Bulma: it returns a nav and a JSON tag used by the Pagy.combo_nav javascript
|
@@ -53,7 +53,7 @@ class Pagy
|
|
53
53
|
html << %(<div class="pagy-combo-input control level is-mobile">#{pagy_t('pagy.combo_nav_js', page_input: input, count: p_page, pages: p_pages)}</div>)
|
54
54
|
html << (p_next ? %(<p class="control">#{link.call(p_next, pagy_t('pagy.nav.next'), 'class="button" aria-label="next page"')}</p>)
|
55
55
|
: %(<p class="control"><a class="button" disabled>#{pagy_t('pagy.nav.next')}</a></p>))
|
56
|
-
html << %(</div></nav>#{pagy_json_tag(:combo_nav, id, p_page,
|
56
|
+
html << %(</div></nav>#{pagy_json_tag(:combo_nav, id, p_page, pagy_marked_link(link), defined?(TRIM) && pagy.vars[:page_param])})
|
57
57
|
end
|
58
58
|
|
59
59
|
end
|
@@ -36,7 +36,7 @@ class Pagy
|
|
36
36
|
'after' => ( (p_next ? %(<li class="next">#{link.call(p_next, pagy_t('pagy.nav.next'), 'aria-label="next"')}</li>)
|
37
37
|
: %(<li class="next disabled">#{pagy_t('pagy.nav.next')}</li>)) \
|
38
38
|
+ '</ul>' ) }
|
39
|
-
%(<nav id="#{id}" class="pagy-foundation-nav-js" role="navigation" aria-label="Pagination"></nav>#{pagy_json_tag(:nav, id, tags, pagy.sequels)})
|
39
|
+
%(<nav id="#{id}" class="pagy-foundation-nav-js" role="navigation" aria-label="Pagination"></nav>#{pagy_json_tag(:nav, id, tags, pagy.sequels, defined?(TRIM) && pagy.vars[:page_param])})
|
40
40
|
end
|
41
41
|
|
42
42
|
# Javascript combo pagination for Foundation: it returns a nav and a JSON tag used by the Pagy.combo_nav javascript
|
@@ -50,7 +50,7 @@ class Pagy
|
|
50
50
|
html << %(<span class="input-group-label">#{pagy_t('pagy.combo_nav_js', page_input: input, count: p_page, pages: p_pages)}</span>)
|
51
51
|
html << (p_next ? link.call(p_next, pagy_t('pagy.nav.next'), 'style="margin-bottom: 0px;" aria-label="next" class="next button primary"')
|
52
52
|
: %(<a style="margin-bottom: 0px;" class="next button primary disabled" href="#">#{pagy_t('pagy.nav.next')}</a>))
|
53
|
-
html << %(</div></nav>#{pagy_json_tag(:combo_nav, id, p_page,
|
53
|
+
html << %(</div></nav>#{pagy_json_tag(:combo_nav, id, p_page, pagy_marked_link(link), defined?(TRIM) && pagy.vars[:page_param])})
|
54
54
|
end
|
55
55
|
|
56
56
|
end
|
data/lib/pagy/extras/items.rb
CHANGED
@@ -49,14 +49,14 @@ class Pagy
|
|
49
49
|
def pagy_items_selector_js(pagy, id=pagy_id)
|
50
50
|
p_vars = pagy.vars
|
51
51
|
p_items = p_vars[:items]
|
52
|
-
p_vars[:items] = '
|
53
|
-
|
52
|
+
p_vars[:items] = '__pagy_items__'
|
53
|
+
link = pagy_marked_link(pagy_link_proc(pagy))
|
54
54
|
p_vars[:items] = p_items # restore the items
|
55
55
|
|
56
56
|
html = EMPTY + %(<span id="#{id}">)
|
57
57
|
input = %(<input type="number" min="1" max="#{p_vars[:max_items]}" value="#{p_items}" style="padding: 0; text-align: center; width: #{p_items.to_s.length+1}rem;">)
|
58
58
|
html << %(#{pagy_t('pagy.items_selector_js', item_name: pagy_t(p_vars[:i18n_key], count: p_items), items_input: input, count: p_items)})
|
59
|
-
html << %(</span>#{pagy_json_tag(:items_selector, id, pagy.from,
|
59
|
+
html << %(</span>#{pagy_json_tag(:items_selector, id, pagy.from, link, defined?(TRIM) && p_vars[:page_param])})
|
60
60
|
end
|
61
61
|
|
62
62
|
end
|
@@ -35,7 +35,7 @@ class Pagy
|
|
35
35
|
'after' => ( (p_next ? %(<li class="waves-effect next">#{link.call(p_next, '<i class="material-icons">chevron_right</i>', 'aria-label="next"')}</li>)
|
36
36
|
: %(<li class="next disabled"><a href="#"><i class="material-icons">chevron_right</i></a></li>)) \
|
37
37
|
+ '</ul>' ) }
|
38
|
-
%(<div id="#{id}" class="pagy-materialize-nav-js" role="navigation" aria-label="pager"></div>#{pagy_json_tag(:nav, id, tags, pagy.sequels)})
|
38
|
+
%(<div id="#{id}" class="pagy-materialize-nav-js" role="navigation" aria-label="pager"></div>#{pagy_json_tag(:nav, id, tags, pagy.sequels, defined?(TRIM) && pagy.vars[:page_param])})
|
39
39
|
end
|
40
40
|
|
41
41
|
# Javascript combo pagination for materialize: it returns a nav and a JSON tag used by the Pagy.combo_nav javascript
|
@@ -52,7 +52,7 @@ class Pagy
|
|
52
52
|
html << %(<div class="pagy-combo-input btn-flat" style="cursor: default; padding: 0px">#{pagy_t('pagy.combo_nav_js', page_input: input, count: p_page, pages: p_pages)}</div>)
|
53
53
|
html << (p_next ? %(<li class="waves-effect next" #{li_style}>#{link.call p_next, '<i class="material-icons">chevron_right</i>', 'aria-label="next"'}</li>)
|
54
54
|
: %(<li class="next disabled" #{li_style}><a href="#"><i class="material-icons">chevron_right</i></a></li>))
|
55
|
-
html << %(</ul></div>#{pagy_json_tag(:combo_nav, id, p_page,
|
55
|
+
html << %(</ul></div>#{pagy_json_tag(:combo_nav, id, p_page, pagy_marked_link(link), defined?(TRIM) && pagy.vars[:page_param])})
|
56
56
|
end
|
57
57
|
|
58
58
|
end
|
data/lib/pagy/extras/navs.rb
CHANGED
@@ -17,7 +17,7 @@ class Pagy
|
|
17
17
|
'gap' => %(<span class="page gap">#{pagy_t('pagy.nav.gap')}</span> ),
|
18
18
|
'after' => p_next ? %(<span class="page next">#{link.call p_next, pagy_t('pagy.nav.next'), 'aria-label="next"'}</span>)
|
19
19
|
: %(<span class="page next disabled">#{pagy_t('pagy.nav.next')}</span>) }
|
20
|
-
%(<nav id="#{id}" class="pagy-nav-js pagination" role="navigation" aria-label="pager"></nav>#{pagy_json_tag(:nav, id, tags, pagy.sequels)})
|
20
|
+
%(<nav id="#{id}" class="pagy-nav-js pagination" role="navigation" aria-label="pager"></nav>#{pagy_json_tag(:nav, id, tags, pagy.sequels, defined?(TRIM) && pagy.vars[:page_param])})
|
21
21
|
end
|
22
22
|
|
23
23
|
# Javascript combo pagination: it returns a nav and a JSON tag used by the Pagy.combo_nav javascript
|
@@ -31,7 +31,7 @@ class Pagy
|
|
31
31
|
html << %(<span class="pagy-combo-input" style="margin: 0 0.6rem;">#{pagy_t('pagy.combo_nav_js', page_input: input, count: p_page, pages: p_pages)}</span> )
|
32
32
|
html << (p_next ? %(<span class="page next">#{link.call p_next, pagy_t('pagy.nav.next'), 'aria-label="next"'}</span>)
|
33
33
|
: %(<span class="page next disabled">#{pagy_t('pagy.nav.next')}</span>))
|
34
|
-
html << %(</nav>#{pagy_json_tag(:combo_nav, id, p_page,
|
34
|
+
html << %(</nav>#{pagy_json_tag(:combo_nav, id, p_page, pagy_marked_link(link), defined?(TRIM) && pagy.vars[:page_param])})
|
35
35
|
end
|
36
36
|
|
37
37
|
end
|
data/lib/pagy/extras/semantic.rb
CHANGED
@@ -34,7 +34,7 @@ class Pagy
|
|
34
34
|
'gap' => %(<div class="disabled item">#{pagy_t('pagy.nav.gap')}</div>),
|
35
35
|
'after' => (p_next ? %(#{link.call(p_next, '<i class="right small chevron icon"></i>', 'aria-label="next"')})
|
36
36
|
: %(<div class="item disabled"><i class="right small chevron icon"></i></div>)) }
|
37
|
-
%(<div id="#{id}" class="pagy-semantic-nav-js ui pagination menu" role="navigation" aria-label="pager"></div>#{pagy_json_tag(:nav, id, tags, pagy.sequels)})
|
37
|
+
%(<div id="#{id}" class="pagy-semantic-nav-js ui pagination menu" role="navigation" aria-label="pager"></div>#{pagy_json_tag(:nav, id, tags, pagy.sequels, defined?(TRIM) && pagy.vars[:page_param])})
|
38
38
|
end
|
39
39
|
|
40
40
|
# Combo pagination for semantic: it returns a nav and a JSON tag used by the Pagy.combo_nav javascript
|
@@ -48,7 +48,7 @@ class Pagy
|
|
48
48
|
html << %(<div class="pagy-combo-input item">#{pagy_t('pagy.combo_nav_js', page_input: input, count: p_page, pages: p_pages)}</div> )
|
49
49
|
html << (p_next ? %(#{link.call p_next, '<i class="right small chevron icon"></i>', 'aria-label="next"'})
|
50
50
|
: %(<div class="item disabled"><i class="right small chevron icon"></i></div>))
|
51
|
-
html << %(</div>#{pagy_json_tag(:combo_nav, id, p_page,
|
51
|
+
html << %(</div>#{pagy_json_tag(:combo_nav, id, p_page, pagy_marked_link(link), defined?(TRIM) && pagy.vars[:page_param])})
|
52
52
|
end
|
53
53
|
|
54
54
|
end
|
data/lib/pagy/extras/shared.rb
CHANGED
@@ -43,11 +43,9 @@ class Pagy
|
|
43
43
|
"pagy-#{Digest::SHA1.hexdigest(caller(2..2)[0].split(':in')[0])}"
|
44
44
|
end
|
45
45
|
|
46
|
-
# it
|
47
|
-
def
|
48
|
-
|
49
|
-
links['trimmed'] = link.call(1, '', 'style="display: none;"') if defined?(TRIM)
|
50
|
-
links
|
46
|
+
# it returns the marked link to used by pagy.js
|
47
|
+
def pagy_marked_link(link)
|
48
|
+
link.call(MARK, '', 'style="display: none;"')
|
51
49
|
end
|
52
50
|
|
53
51
|
end
|
data/lib/pagy/extras/trim.rb
CHANGED
@@ -6,29 +6,18 @@ class Pagy
|
|
6
6
|
|
7
7
|
module Frontend
|
8
8
|
|
9
|
-
# boolean used by
|
10
|
-
TRIM = true
|
9
|
+
TRIM = true # boolean used by *_js helpers
|
11
10
|
|
12
11
|
alias_method :pagy_link_proc_without_trim, :pagy_link_proc
|
13
12
|
def pagy_link_proc_with_trim(pagy, link_extra='')
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
"#{start}#{ if n == p_prev ; ' rel="prev"'
|
21
|
-
elsif n == p_next ; ' rel="next"'
|
22
|
-
else '' end } #{extra}>#{text}</a>"}
|
13
|
+
link_proc = pagy_link_proc_without_trim(pagy, link_extra)
|
14
|
+
page_param = pagy.vars[:page_param]
|
15
|
+
lambda do |n, text=n, extra=''|
|
16
|
+
link = link_proc.call(n, text, extra)
|
17
|
+
n == 1 ? link.sub(/[?&]#{page_param}=1(?![&])|\b(?<=[?&])#{page_param}=1&/, '') : link
|
18
|
+
end
|
23
19
|
end
|
24
20
|
alias_method :pagy_link_proc, :pagy_link_proc_with_trim
|
25
21
|
|
26
|
-
private
|
27
|
-
|
28
|
-
# separate method easier to test
|
29
|
-
def pagy_trim_url(url, param_string)
|
30
|
-
url.sub(/((?:[?&])#{param_string}\z|\b(?<=[?&])#{param_string}&)/, '')
|
31
|
-
end
|
32
|
-
|
33
22
|
end
|
34
23
|
end
|
data/lib/pagy/frontend.rb
CHANGED
@@ -28,7 +28,7 @@ class Pagy
|
|
28
28
|
include Helpers
|
29
29
|
|
30
30
|
EMPTY = '' # EMPTY + 'string' is almost as fast as +'string' but is also 1.9 compatible
|
31
|
-
MARK = '
|
31
|
+
MARK = '__pagy_page__' # string used for search and replace, hardcoded also in the pagy.js file
|
32
32
|
|
33
33
|
# Generic pagination: it returns the html with the series of links to the pages
|
34
34
|
def pagy_nav(pagy)
|
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: 3.
|
4
|
+
version: 3.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Domizio Demichelis
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-05-
|
11
|
+
date: 2019-05-10 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: 'Agnostic pagination in plain ruby: it works with any framework, ORM
|
14
14
|
and DB type, with all kinds of collections, even pre-paginated, scopes, Arrays,
|