pagy 0.9.1 → 0.9.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ac035613ae9e5c82b9d358f4e88f6d04dbad6bf665e58e9d24fbcbbc62038064
4
- data.tar.gz: 0216c586e299a80f12a390726ff6246f18e251b3a3d7903faab91f295b2b40de
3
+ metadata.gz: d25549587b5ffb4311920d5a1f52f1e181e2c0b062c27936fe85cf453c4d3361
4
+ data.tar.gz: 912cc77296b4e6ba9db0feef70c92580ceaaa8bc2b4794d7a5d3e2bd7700c0d4
5
5
  SHA512:
6
- metadata.gz: fdc2a76ae6492bf5d983ffb7899805d51c3b17e083742ad6f19c1d9f2c854dd47cb685ce018590ec0482ba62fac30957eccfe9f49b8921e4cd612f60aa3d8a52
7
- data.tar.gz: 335243eccb83babf430f3d63a899384e01f01d05d6229775742157c873f08579783aec0136e52e5b591801a0154a2b358af3df758ff0417666b8adae96eab35a
6
+ metadata.gz: c76ee653cc0693cb646b9ed4bbc552e2c91541c3860120322b1105e7197b311b2d3c052f760bda7af2483c5f7f964aeca0b0b84512969b3fb6dab94b54ecdd24
7
+ data.tar.gz: 0126c853a4edd59214f791c1ada7c26661b90bc098fd6c252f89b70354b8db59a09162494ccb9df6243dceb88e721d5c4ab02a3110607ee613e1a27dfe619fe4
@@ -1,4 +1,5 @@
1
1
  # See the Pagy documentation: https://ddnexus.github.io/pagy/extras/bootstrap
2
+ # frozen_string_literal: true
2
3
 
3
4
  class Pagy
4
5
  # Add nav helper for bootstrap pagination
@@ -6,18 +7,18 @@ class Pagy
6
7
 
7
8
  # Pagination for bootstrap: it returns the html with the series of links to the pages
8
9
  def pagy_nav_bootstrap(pagy)
9
- tags, link, p_prev, p_next = '', pagy_link_proc(pagy, 'class="page-link"'.freeze), pagy.prev, pagy.next
10
+ tags, link, p_prev, p_next = +'', pagy_link_proc(pagy, 'class="page-link"'), pagy.prev, pagy.next
10
11
 
11
- tags << (p_prev ? %(<li class="page-item prev">#{link.call p_prev, pagy_t('pagy.nav.prev'.freeze), 'aria-label="previous"'.freeze}</li>)
12
- : %(<li class="page-item prev disabled"><a href="#" class="page-link">#{pagy_t('pagy.nav.prev'.freeze)}</a></li>))
12
+ tags << (p_prev ? %(<li class="page-item prev">#{link.call p_prev, pagy_t('pagy.nav.prev'), 'aria-label="previous"'}</li>)
13
+ : %(<li class="page-item prev disabled"><a href="#" class="page-link">#{pagy_t('pagy.nav.prev')}</a></li>))
13
14
  pagy.series.each do |item| # series example: [1, :gap, 7, 8, "9", 10, 11, :gap, 36]
14
15
  tags << if item.is_a?(Integer); %(<li class="page-item">#{link.call item}</li>) # page link
15
16
  elsif item.is_a?(String) ; %(<li class="page-item active">#{link.call item}</li>) # active page
16
- elsif item == :gap ; %(<li class="page-item gap disabled"><a href="#" class="page-link">#{pagy_t('pagy.nav.gap'.freeze)}</a></li>) # page gap
17
+ elsif item == :gap ; %(<li class="page-item gap disabled"><a href="#" class="page-link">#{pagy_t('pagy.nav.gap')}</a></li>) # page gap
17
18
  end
18
19
  end
19
- tags << (p_next ? %(<li class="page-item next">#{link.call p_next, pagy_t('pagy.nav.next'.freeze), 'aria-label="next"'.freeze}</li>)
20
- : %(<li class="page-item next disabled"><a href="#" class="page-link">#{pagy_t('pagy.nav.next'.freeze)}</a></li>))
20
+ tags << (p_next ? %(<li class="page-item next">#{link.call p_next, pagy_t('pagy.nav.next'), 'aria-label="next"'}</li>)
21
+ : %(<li class="page-item next disabled"><a href="#" class="page-link">#{pagy_t('pagy.nav.next')}</a></li>))
21
22
  %(<nav class="pagy-nav-boostrap pagination" role="navigation" aria-label="pager"><ul class="pagination">#{tags}</ul></nav>)
22
23
  end
23
24
 
@@ -1,4 +1,5 @@
1
1
  # See the Pagy documentation: https://ddnexus.github.io/pagy/extras/compact
2
+ # frozen_string_literal: true
2
3
 
3
4
  class Pagy
4
5
  # Add nav helpers for compact pagination
@@ -7,19 +8,19 @@ class Pagy
7
8
  # Generic compact pagination: it returns the html with the series of links to the pages
8
9
  # we use a numeric input tag to set the page and the PagyCompact javascript to navigate
9
10
  def pagy_nav_compact(pagy, id=caller(1,1)[0].hash)
10
- tags, link, p_prev, p_next, p_page, p_pages = '', pagy_link_proc(pagy), pagy.prev, pagy.next, pagy.page, pagy.pages
11
+ tags, link, p_prev, p_next, p_page, p_pages = +'', pagy_link_proc(pagy), pagy.prev, pagy.next, pagy.page, pagy.pages
11
12
 
12
13
  tags << %(<nav id="pagy-nav-#{id}" class="pagy-nav-compact pagination" role="navigation" aria-label="pager">)
13
14
 
14
15
  tags << link.call(MARKER, '', %(style="display: none;" ))
15
- tags << (p_prev ? %(<span class="page prev">#{link.call p_prev, pagy_t('pagy.nav.prev'.freeze), 'aria-label="previous"'.freeze}</span> )
16
- : %(<span class="page prev disabled">#{pagy_t('pagy.nav.prev'.freeze)}</span> ))
16
+ tags << (p_prev ? %(<span class="page prev">#{link.call p_prev, pagy_t('pagy.nav.prev'), 'aria-label="previous"'}</span> )
17
+ : %(<span class="page prev disabled">#{pagy_t('pagy.nav.prev')}</span> ))
17
18
 
18
19
  input = %(<input type="number" min="1" max="#{p_pages}" value="#{p_page}" style="padding: 0; text-align: center; width: #{p_pages.to_s.length+1}rem;">)
19
- tags << %(<span class="pagy-compact-input" style="margin: 0 0.6rem;">#{pagy_t('pagy.compact.page'.freeze)} #{input} #{pagy_t('pagy.compact.of'.freeze)} #{p_pages}</span> )
20
+ tags << %(<span class="pagy-compact-input" style="margin: 0 0.6rem;">#{pagy_t('pagy.compact.page')} #{input} #{pagy_t('pagy.compact.of')} #{p_pages}</span> )
20
21
 
21
- tags << (p_next ? %(<span class="page next">#{link.call p_next, pagy_t('pagy.nav.next'.freeze), 'aria-label="next"'.freeze}</span>)
22
- : %(<span class="page next disabled">#{pagy_t('pagy.nav.next'.freeze)}</span>))
22
+ tags << (p_next ? %(<span class="page next">#{link.call p_next, pagy_t('pagy.nav.next'), 'aria-label="next"'}</span>)
23
+ : %(<span class="page next disabled">#{pagy_t('pagy.nav.next')}</span>))
23
24
 
24
25
  tags << %(</nav><script>PagyCompact('#{id}', '#{MARKER}', '#{p_page}');</script>)
25
26
  end
@@ -27,21 +28,21 @@ class Pagy
27
28
  # Compact pagination for bootstrap: it returns the html with the series of links to the pages
28
29
  # we use a numeric input tag to set the page and the PagyCompact javascript to navigate
29
30
  def pagy_nav_bootstrap_compact(pagy, id=caller(1,1)[0].hash)
30
- tags, link, p_prev, p_next, p_page, p_pages = '', pagy_link_proc(pagy), pagy.prev, pagy.next, pagy.page, pagy.pages
31
+ tags, link, p_prev, p_next, p_page, p_pages = +'', pagy_link_proc(pagy), pagy.prev, pagy.next, pagy.page, pagy.pages
31
32
 
32
33
  tags << %(<nav id="pagy-nav-#{id}" class="pagy-nav-bootstrap-compact pagination" role="navigation" aria-label="pager">)
33
34
 
34
35
  tags << link.call(MARKER, '', %(style="display: none;" ))
35
36
 
36
37
  tags << %(<div class="btn-group" role="group">)
37
- tags << (p_prev ? link.call(p_prev, pagy_t('pagy.nav.prev'.freeze), 'aria-label="previous" class="prev btn btn-primary"'.freeze)
38
- : %(<a class="prev btn btn-primary disabled" href="#">#{pagy_t('pagy.nav.prev'.freeze)}</a>))
38
+ tags << (p_prev ? link.call(p_prev, pagy_t('pagy.nav.prev'), 'aria-label="previous" class="prev btn btn-primary"')
39
+ : %(<a class="prev btn btn-primary disabled" href="#">#{pagy_t('pagy.nav.prev')}</a>))
39
40
 
40
41
  input = %(<input type="number" min="1" max="#{p_pages}" value="#{p_page}" style="padding: 0; border: none; text-align: center; width: #{p_pages.to_s.length+1}rem;">)
41
- tags << %(<div class="pagy-compact-input btn btn-primary disabled">#{pagy_t('pagy.compact.page'.freeze)} #{input} #{pagy_t('pagy.compact.of'.freeze)} #{p_pages}</div>)
42
+ tags << %(<div class="pagy-compact-input btn btn-primary disabled">#{pagy_t('pagy.compact.page')} #{input} #{pagy_t('pagy.compact.of')} #{p_pages}</div>)
42
43
 
43
- tags << (p_next ? link.call(p_next, pagy_t('pagy.nav.next'.freeze), 'aria-label="next" class="next btn btn-primary"'.freeze)
44
- : %(<a class="next btn btn-primary disabled" href="#">#{pagy_t('pagy.nav.next'.freeze)}</a>))
44
+ tags << (p_next ? link.call(p_next, pagy_t('pagy.nav.next'), 'aria-label="next" class="next btn btn-primary"')
45
+ : %(<a class="next btn btn-primary disabled" href="#">#{pagy_t('pagy.nav.next')}</a>))
45
46
 
46
47
  tags << %(</div></nav><script>PagyCompact('#{id}', '#{MARKER}', '#{p_page}');</script>)
47
48
  end
@@ -1,4 +1,5 @@
1
1
  # See the Pagy documentation: https://ddnexus.github.io/pagy/extras/items
2
+ # frozen_string_literal: true
2
3
 
3
4
  class Pagy
4
5
 
@@ -31,11 +32,11 @@ class Pagy
31
32
  def pagy_items_selector(pagy, id=caller(1,1)[0].hash)
32
33
  pagy = pagy.clone; p_vars = pagy.vars; p_items = p_vars[:items]; p_vars[:items] = "#{MARKER}-items-"
33
34
 
34
- tags = %(<span id="pagy-items-#{id}">)
35
+ tags = +%(<span id="pagy-items-#{id}">)
35
36
 
36
37
  tags << %(<a href="#{pagy_url_for("#{MARKER}-page-", pagy)}"></a>)
37
38
  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;">)
38
- tags << %(#{pagy_t('pagy.items.show'.freeze)} #{input} #{pagy_t('pagy.items.items'.freeze)})
39
+ tags << %(#{pagy_t('pagy.items.show')} #{input} #{pagy_t('pagy.items.items')})
39
40
 
40
41
  tags << %(</span><script>PagyItems('#{id}', '#{MARKER}', #{pagy.from});</script>)
41
42
  end
@@ -1,4 +1,5 @@
1
1
  # See the Pagy documentation: https://ddnexus.github.io/pagy/extras/responsive
2
+ # frozen_string_literal: true
2
3
 
3
4
  require 'json'
4
5
 
@@ -33,38 +34,37 @@ class Pagy
33
34
  # Generic responsive pagination: it returns the html with the series of links to the pages
34
35
  # we build the tags as a json object string and render them with the PagyResponsive javascript
35
36
  def pagy_nav_responsive(pagy, id=caller(1,1)[0].hash)
36
- tags, link, p_prev, p_next, responsive = '{', pagy_link_proc(pagy), pagy.prev, pagy.next, pagy.responsive
37
+ tags, link, p_prev, p_next, responsive = +'{', pagy_link_proc(pagy), pagy.prev, pagy.next, pagy.responsive
37
38
 
38
- tags << (p_prev ? %('prev':'<span class="page prev">#{link.call p_prev, pagy_t('pagy.nav.prev'.freeze), 'aria-label="previous"'.freeze}</span> ',)
39
- : %('prev':'<span class="page prev disabled">#{pagy_t('pagy.nav.prev'.freeze)}</span> ',))
39
+ tags << (p_prev ? %('prev':'<span class="page prev">#{link.call p_prev, pagy_t('pagy.nav.prev'), 'aria-label="previous"'}</span> ',)
40
+ : %('prev':'<span class="page prev disabled">#{pagy_t('pagy.nav.prev')}</span> ',))
40
41
  responsive[:items].each do |item| # series example: [1, :gap, 7, 8, "9", 10, 11, :gap, 36]
41
42
  tags << if item.is_a?(Integer); %('#{item}':'<span class="page">#{link.call item}</span> ',) # page link
42
43
  elsif item.is_a?(String) ; %('#{item}':'<span class="page active">#{item}</span> ',) # current page
43
- elsif item == :gap ; %('#{item}':'<span class="page gap">#{pagy_t('pagy.nav.gap'.freeze)}</span> ',) # page gap
44
+ elsif item == :gap ; %('#{item}':'<span class="page gap">#{pagy_t('pagy.nav.gap')}</span> ',) # page gap
44
45
  end
45
46
  end
46
- tags << (p_next ? %('next':'<span class="page next">#{link.call p_next, pagy_t('pagy.nav.next'.freeze), 'aria-label="next"'.freeze}</span>'})
47
- : %('next':'<span class="page next disabled">#{pagy_t('pagy.nav.next'.freeze)}</span>'}))
47
+ tags << (p_next ? %('next':'<span class="page next">#{link.call p_next, pagy_t('pagy.nav.next'), 'aria-label="next"'}</span>'})
48
+ : %('next':'<span class="page next disabled">#{pagy_t('pagy.nav.next')}</span>'}))
48
49
  script = %(<script>PagyResponsive('#{id}', #{tags}, #{responsive[:widths].to_json}, #{responsive[:series].to_json});</script>)
49
50
  %(<nav id="pagy-nav-#{id}" class="pagy-nav-responsive pagination" role="navigation" aria-label="pager"></nav>#{script})
50
51
  end
51
52
 
52
-
53
53
  # Responsive pagination for bootstrap: it returns the html with the series of links to the pages
54
54
  # we build the tags as a json object string and render them with the PagyResponsive javascript
55
55
  def pagy_nav_bootstrap_responsive(pagy, id=caller(1,1)[0].hash)
56
- tags, link, p_prev, p_next, responsive = '{', pagy_link_proc(pagy, 'class="page-link"'.freeze), pagy.prev, pagy.next, pagy.responsive
56
+ tags, link, p_prev, p_next, responsive = +'{', pagy_link_proc(pagy, 'class="page-link"'), pagy.prev, pagy.next, pagy.responsive
57
57
 
58
- tags << (p_prev ? %('prev':'<li class="page-item prev">#{link.call p_prev, pagy_t('pagy.nav.prev'.freeze), 'aria-label="previous"'.freeze}</li>',)
59
- : %('prev':'<li class="page-item prev disabled"><a href="#" class="page-link">#{pagy_t('pagy.nav.prev'.freeze)}</a></li>',))
58
+ tags << (p_prev ? %('prev':'<li class="page-item prev">#{link.call p_prev, pagy_t('pagy.nav.prev'), 'aria-label="previous"'}</li>',)
59
+ : %('prev':'<li class="page-item prev disabled"><a href="#" class="page-link">#{pagy_t('pagy.nav.prev')}</a></li>',))
60
60
  responsive[:items].each do |item| # series example: [1, :gap, 7, 8, "9", 10, 11, :gap, 36]
61
61
  tags << if item.is_a?(Integer); %('#{item}':'<li class="page-item">#{link.call item}</li>',) # page link
62
62
  elsif item.is_a?(String) ; %('#{item}':'<li class="page-item active">#{link.call item}</li>',) # active page
63
- elsif item == :gap ; %('#{item}':'<li class="page-item gap disabled"><a href="#" class="page-link">#{pagy_t('pagy.nav.gap'.freeze)}</a></li>',) # page gap
63
+ elsif item == :gap ; %('#{item}':'<li class="page-item gap disabled"><a href="#" class="page-link">#{pagy_t('pagy.nav.gap')}</a></li>',) # page gap
64
64
  end
65
65
  end
66
- tags << (p_next ? %('next':'<li class="page-item next">#{link.call p_next, pagy_t('pagy.nav.next'.freeze), 'aria-label="next"'.freeze}</li>'})
67
- : %('next':'<li class="page-item next disabled"><a href="#" class="page-link">#{pagy_t('pagy.nav.next'.freeze)}</a></li>'}))
66
+ tags << (p_next ? %('next':'<li class="page-item next">#{link.call p_next, pagy_t('pagy.nav.next'), 'aria-label="next"'}</li>'})
67
+ : %('next':'<li class="page-item next disabled"><a href="#" class="page-link">#{pagy_t('pagy.nav.next')}</a></li>'}))
68
68
  script = %(<script>PagyResponsive('#{id}', #{tags}, #{responsive[:widths].to_json}, #{responsive[:series].to_json});</script>)
69
69
  %(<nav id="pagy-nav-#{id}" class="pagy-nav-bootstrap-responsive pagination" role="navigation" aria-label="pager"><ul class="pagination"></ul></nav>#{script})
70
70
  end
data/lib/pagy/frontend.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  # See Pagy::Frontend API documentation: https://ddnexus.github.io/pagy/api/frontend
2
+ # frozen_string_literal: true
2
3
 
3
4
  require 'yaml'
4
5
 
@@ -10,63 +11,59 @@ class Pagy
10
11
 
11
12
  # Generic pagination: it returns the html with the series of links to the pages
12
13
  def pagy_nav(pagy)
13
- tags, link, p_prev, p_next = '', pagy_link_proc(pagy), pagy.prev, pagy.next
14
+ tags, link, p_prev, p_next = +'', pagy_link_proc(pagy), pagy.prev, pagy.next
14
15
 
15
- tags << (p_prev ? %(<span class="page prev">#{link.call p_prev, pagy_t('pagy.nav.prev'.freeze), 'aria-label="previous"'.freeze}</span> )
16
- : %(<span class="page prev disabled">#{pagy_t('pagy.nav.prev'.freeze)}</span> ))
16
+ tags << (p_prev ? %(<span class="page prev">#{link.call p_prev, pagy_t('pagy.nav.prev'), 'aria-label="previous"'}</span> )
17
+ : %(<span class="page prev disabled">#{pagy_t('pagy.nav.prev')}</span> ))
17
18
  pagy.series.each do |item| # series example: [1, :gap, 7, 8, "9", 10, 11, :gap, 36]
18
- tags << if item.is_a?(Integer); %(<span class="page">#{link.call item}</span> ) # page link
19
- elsif item.is_a?(String) ; %(<span class="page active">#{item}</span> ) # current page
20
- elsif item == :gap ; %(<span class="page gap">#{pagy_t('pagy.nav.gap'.freeze)}</span> ) # page gap
19
+ tags << if item.is_a?(Integer); %(<span class="page">#{link.call item}</span> ) # page link
20
+ elsif item.is_a?(String) ; %(<span class="page active">#{item}</span> ) # current page
21
+ elsif item == :gap ; %(<span class="page gap">#{pagy_t('pagy.nav.gap')}</span> ) # page gap
21
22
  end
22
23
  end
23
- tags << (p_next ? %(<span class="page next">#{link.call p_next, pagy_t('pagy.nav.next'.freeze), 'aria-label="next"'.freeze}</span>)
24
- : %(<span class="page next disabled">#{pagy_t('pagy.nav.next'.freeze)}</span>))
24
+ tags << (p_next ? %(<span class="page next">#{link.call p_next, pagy_t('pagy.nav.next'), 'aria-label="next"'}</span>)
25
+ : %(<span class="page next disabled">#{pagy_t('pagy.nav.next')}</span>))
25
26
  %(<nav class="pagy-nav pagination" role="navigation" aria-label="pager">#{tags}</nav>)
26
27
  end
27
28
 
28
-
29
29
  # Return examples: "Displaying items 41-60 of 324 in total" or "Displaying Products 41-60 of 324 in total"
30
30
  def pagy_info(pagy)
31
31
  name = pagy_t(pagy.vars[:item_path], count: pagy.count)
32
- path = pagy.pages == 1 ? 'pagy.info.single_page'.freeze : 'pagy.info.multiple_pages'.freeze
32
+ path = pagy.pages == 1 ? 'pagy.info.single_page' : 'pagy.info.multiple_pages'
33
33
  pagy_t(path, item_name: name, count: pagy.count, from: pagy.from, to: pagy.to)
34
34
  end
35
35
 
36
-
37
36
  # this works with all Rack-based frameworks (Sinatra, Padrino, Rails, ...)
38
37
  def pagy_url_for(page, pagy)
39
38
  p_vars = pagy.vars; params = request.GET.merge(p_vars[:page_param] => page, **p_vars[:params])
40
39
  "#{request.path}?#{Rack::Utils.build_nested_query(pagy_get_params(params))}#{p_vars[:anchor]}"
41
40
  end
42
41
 
43
-
44
42
  # Sub-method called only by #pagy_url_for: here for easy customization of params by overriding
45
43
  def pagy_get_params(params) params end
46
44
 
47
-
48
- MARKER = "-pagy-#{'pagy'.hash}-".freeze
45
+ MARKER = "-pagy-#{'pagy'.hash}-"
49
46
 
50
47
  # Returns a performance optimized proc to generate the HTML links
51
48
  # Benchmarked on a 20 link nav: it is ~27x faster and uses ~13x less memory than rails' link_to
52
- def pagy_link_proc(pagy, link_extra=''.freeze)
49
+ def pagy_link_proc(pagy, link_extra='')
53
50
  p_prev, p_next = pagy.prev, pagy.next
54
51
  a, b = %(<a href="#{pagy_url_for(MARKER, pagy)}" #{pagy.vars[:link_extra]} #{link_extra}).split(MARKER, 2)
55
- -> (n, text=n, extra=''.freeze) { "#{a}#{n}#{b}#{ if n == p_prev ; ' rel="prev"'.freeze
56
- elsif n == p_next ; ' rel="next"'.freeze
57
- else ''.freeze end } #{extra}>#{text}</a>" }
52
+ -> (n, text=n, extra='') { "#{a}#{n}#{b}#{ if n == p_prev ; ' rel="prev"'
53
+ elsif n == p_next ; ' rel="next"'
54
+ else '' end } #{extra}>#{text}</a>" }
58
55
  end
59
56
 
60
57
  # Pagy::Frontend::I18N constant
61
58
  I18N_DATA = YAML.load_file(Pagy.root.join('locales', 'pagy.yml')).first[1]
62
- zero_one = ['zero'.freeze, 'one'.freeze]; I18N = { plurals: -> (c) {zero_one[c] || 'other'.freeze}}
59
+ zero_one = ['zero', 'one']; I18N = { plurals: -> (c) {zero_one[c] || 'other'}}
63
60
  def I18N.load_file(file) I18N_DATA.replace(YAML.load_file(file).first[1]) end
64
61
 
65
62
  # Similar to I18n.t for interpolation and pluralization but without translation
66
63
  # Use only for single-language apps: it is specialized for Pagy and 5x faster than I18n.t
67
64
  # See also https://ddnexus.github.io/pagy/extras/i18n to use the standard I18n gem instead
68
65
  def pagy_t(path, vars={})
69
- value = I18N_DATA.dig(*path.to_s.split('.'.freeze)) or return %(translation missing: "#{path}")
66
+ value = I18N_DATA.dig(*path.to_s.split('.')) or return %(translation missing: "#{path}")
70
67
  if value.is_a?(Hash)
71
68
  vars.key?(:count) or return value
72
69
  plural = I18N[:plurals].call(vars[:count])
data/lib/pagy.rb CHANGED
@@ -1,8 +1,9 @@
1
1
  # See Pagy API documentation: https://ddnexus.github.io/pagy/api/pagy
2
+ # frozen_string_literal: true
2
3
 
3
4
  require 'pathname'
4
5
 
5
- class Pagy ; VERSION = '0.9.1'
6
+ class Pagy ; VERSION = '0.9.2'
6
7
 
7
8
  class OutOfRangeError < StandardError; attr_reader :pagy; def initialize(pagy) @pagy = pagy end; end
8
9
 
@@ -10,13 +11,13 @@ class Pagy ; VERSION = '0.9.1'
10
11
  def self.root; Pathname.new(__FILE__).dirname end
11
12
 
12
13
  # default vars
13
- VARS = { page:1, items:20, outset:0, size:[1,4,4,1], page_param: :page, params:{}, anchor:''.freeze, link_extra:''.freeze, item_path:'pagy.info.item_name'.freeze }
14
+ VARS = { page:1, items:20, outset:0, size:[1,4,4,1], page_param: :page, params:{}, anchor:'', link_extra:'', item_path:'pagy.info.item_name' }
14
15
 
15
16
  attr_reader :count, :page, :items, :vars, :pages, :last, :offset, :from, :to, :prev, :next
16
17
 
17
18
  # Merge and validate the options, do some simple aritmetic and set the instance variables
18
19
  def initialize(vars)
19
- @vars = VARS.merge(vars.delete_if{|_,v| v.nil? || v == ''.freeze }) # default vars + cleaned vars
20
+ @vars = VARS.merge(vars.delete_if{|_,v| v.nil? || v == '' }) # default vars + cleaned vars
20
21
  { count:0, items:1, outset:0, page:1 }.each do |k,min| # validate instance variables
21
22
  (@vars[k] && instance_variable_set(:"@#{k}", @vars[k].to_i) >= min) \
22
23
  or raise(ArgumentError, "expected :#{k} >= #{min}; got #{instance_variable_get(:"@#{k}").inspect}")
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: 0.9.1
4
+ version: 0.9.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Domizio Demichelis
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-06-18 00:00:00.000000000 Z
11
+ date: 2018-06-20 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,