pagy 3.10.0 → 4.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9ce66549213b7c1a7f89755a31d5faec46f09372f5b854d7f7ede99fb329b5d0
4
- data.tar.gz: 35071f34f9a15378e91efb38f060e1178ccc2d7609ff2bdc99b435f8f9242417
3
+ metadata.gz: 1893ce66c2ad5ccb5e1b55340873135bf1174f6876a7fe9987bf3d7b11c8b93d
4
+ data.tar.gz: 15ec7c5615cc40f2fc854f18577632d99f0ec83134f432a2526ca51c1c579a2a
5
5
  SHA512:
6
- metadata.gz: d0a3520386cf1b796c5e26fe13c65ebc158d6fccbb24547a37bfcd5ef39ede686e1d3cb771c6ce23303d83529a075d03fc5e0288704b26bd0be17e0e641f1553
7
- data.tar.gz: 7ef28712f3e38fc05fbbebb5445d25d7f0ec97d61bebbd0c1a45830345c4bd5ba1be202b5a7417bc23d8f822d85408cd0051d1d3de22d66e6c6ee10c49caedbd
6
+ metadata.gz: 3b0a30aa314e2abc44dbad8a89352cd640b3ff81979b31436b8911920df344eef2a43cd622ba2921e9ef088a3059611e7e3ccab05f1e07ab7e3bdaefd72ecd58
7
+ data.tar.gz: 318953ee34f26d5f89f59417b2b02edda38608ada3946241633513167c1b5c5e209a8b474dfb8c1f028381283ba20cf367b5e2b7e9ad7ad95ca22af86d94730d
data/lib/config/pagy.rb CHANGED
@@ -1,7 +1,6 @@
1
- # encoding: utf-8
2
1
  # frozen_string_literal: true
3
2
 
4
- # Pagy initializer file (3.10.0)
3
+ # Pagy initializer file (4.2.0)
5
4
  # Customize only what you really need and notice that Pagy works also without any of the following lines.
6
5
  # Should you just cherry pick part of this file, please maintain the require-order of the extras
7
6
 
@@ -23,13 +22,18 @@
23
22
 
24
23
  # Elasticsearch Rails extra: Paginate `ElasticsearchRails::Results` objects
25
24
  # See https://ddnexus.github.io/pagy/extras/elasticsearch_rails
25
+ # default :pagy_search method: change only if you use
26
+ # also the searchkick extra that defines the same
27
+ # VARS[:elasticsearch_rails_search_method] = :pagy_search
26
28
  # require 'pagy/extras/elasticsearch_rails'
27
29
 
28
30
  # Searchkick extra: Paginate `Searchkick::Results` objects
29
31
  # See https://ddnexus.github.io/pagy/extras/searchkick
32
+ # default :pagy_search method: change only if you use
33
+ # also the elasticsearch_rails extra that defines the same
34
+ # VARS[:searchkick_search_method] = :pagy_search
30
35
  # require 'pagy/extras/searchkick'
31
36
 
32
-
33
37
  # Frontend Extras
34
38
 
35
39
  # Bootstrap extra: Add nav, nav_js and combo_nav_js helpers and templates for Bootstrap pagination
@@ -2,7 +2,7 @@
2
2
 
3
3
  function Pagy(){}
4
4
 
5
- Pagy.version = '3.10.0';
5
+ Pagy.version = '4.2.0';
6
6
 
7
7
  Pagy.init = function(arg){
8
8
  var target = arg instanceof Event || arg === undefined ? document : arg,
@@ -0,0 +1,24 @@
1
+ # :east_slavic pluralization (see https://github.com/ddnexus/pagy/blob/master/lib/locales/utils/p11n.rb)
2
+
3
+ bs:
4
+ pagy:
5
+
6
+ item_name:
7
+ one: "stavka"
8
+ few: "stavke"
9
+ many: "stavki"
10
+ other: "stavki"
11
+
12
+ nav:
13
+ prev: "‹ Prethodna"
14
+ next: "Sljedeća  ›"
15
+ gap: "…"
16
+
17
+ info:
18
+ no_items: "Nije pronađena %{item_name}"
19
+ single_page: "Prikazuje se <b>%{count}</b> %{item_name}"
20
+ multiple_pages: "Prikaz %{item_name} <b>%{from}-%{to}</b> od <b>%{count}</b> ukupno"
21
+
22
+ combo_nav_js: "Stranica %{page_input} od %{pages}"
23
+
24
+ items_selector_js: "Prikaži %{items_input} %{item_name} po stranici"
@@ -0,0 +1,24 @@
1
+ # :east_slavic pluralization (see https://github.com/ddnexus/pagy/blob/master/lib/locales/utils/p11n.rb)
2
+
3
+ hr:
4
+ pagy:
5
+
6
+ item_name:
7
+ one: "stavka"
8
+ few: "stavke"
9
+ many: "stavki"
10
+ other: "stavki"
11
+
12
+ nav:
13
+ prev: "&lsaquo;&nbsp;Prethodna"
14
+ next: "Sljedeća &nbsp;&rsaquo;"
15
+ gap: "&hellip;"
16
+
17
+ info:
18
+ no_items: "Nije pronađena %{item_name}"
19
+ single_page: "Prikazuje se <b>%{count}</b> %{item_name}"
20
+ multiple_pages: "Prikaz %{item_name} <b>%{from}-%{to}</b> od <b>%{count}</b> ukupno"
21
+
22
+ combo_nav_js: "Stranica %{page_input} od %{pages}"
23
+
24
+ items_selector_js: "Prikaži %{items_input} %{item_name} po stranici"
@@ -0,0 +1,23 @@
1
+ # :east_slavic pluralization (see https://github.com/ddnexus/pagy/blob/master/lib/locales/utils/p11n.rb)
2
+
3
+ sr:
4
+ pagy:
5
+ item_name:
6
+ one: "ставка"
7
+ few: "ставкe"
8
+ many: "ставки"
9
+ other: "ставки"
10
+
11
+ nav:
12
+ prev: "&lsaquo;&nbsp;Претходна"
13
+ next: "Следећa &nbsp;&rsaquo;"
14
+ gap: "&hellip;"
15
+
16
+ info:
17
+ no_items: "Нema пронађених %{item_name}"
18
+ single_page: "Приказује се <b>%{count}</b> %{item_name}"
19
+ multiple_pages: "Приказ %{item_name} <b>%{from}-%{to}</b> од <b>%{count}</b> укупно"
20
+
21
+ combo_nav_js: "Страниca %{page_input} од %{pages}"
22
+
23
+ items_selector_js: "Прикажи %{items_input} %{item_name} по страниcи"
@@ -0,0 +1,22 @@
1
+ # :one_other pluralization
2
+
3
+ sw:
4
+ pagy:
5
+
6
+ item_name:
7
+ one: "kifaa"
8
+ other: "vifaa"
9
+
10
+ nav:
11
+ prev: "&lsaquo;&nbsp;Awali"
12
+ next: "Ifuatayo&nbsp;&rsaquo;"
13
+ gap: "&hellip;"
14
+
15
+ info:
16
+ no_items: "Hamna %{item_name} vilivyopatikana"
17
+ single_page: "Inaonyesha %{item_name} <b>%{count}</b>"
18
+ multiple_pages: "Inaonyesha %{item_name} <b>%{from}-%{to}</b> ya <b>%{count}</b> kwa jumla"
19
+
20
+ combo_nav_js: "Kurasa %{page_input} ya %{pages}"
21
+
22
+ items_selector_js: "Onyesha %{items_input} %{item_name} kwa kila ukurasa"
@@ -1,25 +1,17 @@
1
1
  # See https://ddnexus.github.io/pagy/api/frontend#i18n
2
- # encoding: utf-8
3
2
  # frozen_string_literal: true
4
3
 
5
4
  # this file returns the I18n hash used as default alternative to the i18n gem
6
5
 
7
- Pagy::DEPRECATED_LOCALES = {'pt-br' =>'pt-BR', 'se' => 'sv-SE'}
8
-
9
6
  Hash.new{|h,_| h.first[1]}.tap do |i18n_hash| # first loaded locale used as default
10
7
  i18n_hash.define_singleton_method(:load) do |*load_args|
11
8
  # eval: we don't need to keep the loader proc in memory
12
9
  eval(Pagy.root.join('locales', 'utils', 'loader.rb').read).call(i18n_hash, *load_args) #rubocop:disable Security/Eval
13
10
  end
14
- i18n_hash.define_singleton_method(:t) do |locale, path, vars={}|
15
- if Pagy::DEPRECATED_LOCALES.key?(locale)
16
- new_locale = Pagy::DEPRECATED_LOCALES[locale]
17
- $stderr.puts("WARNING: the Pagy locale '#{locale}' is deprecated; use '#{new_locale}' instead")
18
- locale = new_locale
19
- end
11
+ i18n_hash.define_singleton_method(:t) do |locale, key, **opts|
20
12
  data, pluralize = self[locale]
21
- translate = data[path] || vars[:count] && data[path+=".#{pluralize.call(vars[:count])}"] or return %([translation missing: "#{path}"])
22
- translate.call(vars)
13
+ translate = data[key] || opts[:count] && data[key+=".#{pluralize.call(opts[:count])}"] or return %([translation missing: "#{key}"])
14
+ translate.call(opts)
23
15
  end
24
16
  i18n_hash.load(locale: 'en')
25
17
  end
@@ -1,18 +1,20 @@
1
- # encoding: utf-8
2
1
  # frozen_string_literal: true
3
2
 
4
3
  # the whole file will be eval'ed/executed and gc-collected after returning/executing the loader proc
5
4
 
6
5
  # eval: no need for the whole file in memory
7
- plurals, _ = eval(Pagy.root.join('locales', 'utils', 'p11n.rb').read) #rubocop:disable Security/Eval
6
+ plurals, = eval Pagy.root.join('locales', 'utils', 'p11n.rb').read # rubocop:disable Security/Eval
8
7
 
9
8
  # flatten the dictionary file nested keys
10
9
  # convert each value to a simple ruby interpolation proc
11
10
  flatten = lambda do |hash, key=''|
12
11
  hash.each.reduce({}) do |h, (k, v)|
13
- v.is_a?(Hash) \
14
- ? h.merge!(flatten.call(v, "#{key}#{k}."))
15
- : h.merge!(eval %({"#{key}#{k}" => lambda{|vars|"#{v.gsub(/%{[^}]+?}/){|m| "\#{vars[:#{m[2..-2]}]||'#{m}'}" }}"}})) #rubocop:disable Security/Eval
12
+ if v.is_a?(Hash)
13
+ h.merge! flatten.call(v, "#{key}#{k}.")
14
+ else
15
+ code = %({"#{key}#{k}" => lambda{|vars|"#{v.gsub(/%{[^}]+?}/){|m| "\#{vars[:#{m[2..-2]}]||'#{m}'}" }}"}})
16
+ h.merge! eval(code) # rubocop:disable Security/Eval
17
+ end
16
18
  end
17
19
  end
18
20
 
@@ -20,11 +22,6 @@ flatten = lambda do |hash, key=''|
20
22
  lambda do |i18n, *args|
21
23
  i18n.clear
22
24
  args.each do |arg|
23
- if Pagy::DEPRECATED_LOCALES.key?(arg[:locale])
24
- new_locale = Pagy::DEPRECATED_LOCALES[arg[:locale]]
25
- $stderr.puts("WARNING: the Pagy locale '#{arg[:locale]}' is deprecated; use '#{new_locale}' instead")
26
- arg[:locale] = new_locale
27
- end
28
25
  arg[:filepath] ||= Pagy.root.join('locales', "#{arg[:locale]}.yml")
29
26
  arg[:pluralize] ||= plurals[arg[:locale]]
30
27
  hash = YAML.load(File.read(arg[:filepath], encoding: 'UTF-8')) #rubocop:disable Security/YAMLLoad
@@ -1,5 +1,4 @@
1
1
  # See https://ddnexus.github.io/pagy/api/frontend#i18n
2
- # encoding: utf-8
3
2
  # frozen_string_literal: true
4
3
 
5
4
  # This file adds support for multiple built-in plualization types.
@@ -18,46 +17,51 @@ from12to14 = [12,13,14].freeze
18
17
  # Each proc may apply to one or more locales below.
19
18
  # Pluralization logic adapted from https://github.com/svenfuchs/rails-i18n
20
19
  p11n = {
21
- one_other: lambda {|n| n == 1 ? 'one' : 'other'}, # default
20
+ one_other: -> (n){ n == 1 ? 'one' : 'other' }, # default
22
21
 
23
22
  east_slavic: lambda do |n|
24
23
  n ||= 0
25
24
  mod10 = n % 10
26
25
  mod100 = n % 100
27
26
 
28
- if mod10 == 1 && mod100 != 11 ; 'one'
29
- elsif from2to4.include?(mod10) && !from12to14.include?(mod100) ; 'few'
30
- elsif mod10 == 0 || from5to9.include?(mod10) || from11to14.include?(mod100) ; 'many'
31
- else 'other'
27
+ case
28
+ when mod10 == 1 && mod100 != 11 then 'one'
29
+ when from2to4.include?(mod10) && !from12to14.include?(mod100) then 'few'
30
+ when mod10 == 0 || from5to9.include?(mod10) || from11to14.include?(mod100) then 'many' # rubocop:disable Style/NumericPredicate
31
+ else 'other'
32
32
  end
33
33
  end,
34
34
 
35
35
  west_slavic: lambda do |n|
36
- if n == 1 ; 'one'
37
- elsif [2, 3, 4].include?(n) ; 'few'
38
- else ; 'other'
39
- end
36
+ case n
37
+ when 1 then 'one'
38
+ when 2, 3, 4 then 'few'
39
+ else 'other'
40
+ end
40
41
  end,
41
42
 
42
43
  one_two_other: lambda do |n|
43
- if n == 1 ; 'one'
44
- elsif n == 2 ; 'two'
45
- else 'other'
44
+ case n
45
+ when 1 then 'one'
46
+ when 2 then 'two'
47
+ else 'other'
46
48
  end
47
49
  end,
48
50
 
49
- one_upto_two_other: lambda {|n| n && n >= 0 && n < 2 ? 'one' : 'other'},
51
+ one_upto_two_other: -> (n){ n && n >= 0 && n < 2 ? 'one' : 'other' },
50
52
 
51
- other: Proc.new { 'other' },
53
+ other: -> (*){ 'other' },
52
54
 
53
55
  polish: lambda do |n|
54
56
  n ||= 0
55
- mod10 = n % 10
57
+ mod10 = n % 10
56
58
  mod100 = n % 100
57
- if n == 1 ; 'one'
58
- elsif from2to4.include?(mod10) && !from12to14.include?(mod100) ; 'few'
59
- elsif (from0to1 + from5to9).include?(mod10) || from12to14.include?(mod100) ; 'many'
60
- else 'other'
59
+
60
+ case
61
+ when n == 1 then 'one'
62
+ when from2to4.include?(mod10) && !from12to14.include?(mod100) then 'few'
63
+ when (from0to1 + from5to9).include?(mod10) || from12to14.include?(mod100) then 'many'
64
+ else 'other'
61
65
  end
62
66
  end
63
67
  }
@@ -67,14 +71,17 @@ p11n = {
67
71
  # The default pluralization for locales not explicitly listed here
68
72
  # is the :one_other pluralization proc (used for English)
69
73
  plurals = Hash.new(p11n[:one_other]).tap do |hash|
74
+ hash['bs'] = p11n[:east_slavic]
70
75
  hash['cs'] = p11n[:west_slavic]
71
76
  hash['id'] = p11n[:other]
72
77
  hash['fr'] = p11n[:one_upto_two_other]
78
+ hash['hr'] = p11n[:east_slavic]
73
79
  hash['ja'] = p11n[:other]
74
80
  hash['km'] = p11n[:other]
75
81
  hash['ko'] = p11n[:other]
76
82
  hash['pl'] = p11n[:polish]
77
83
  hash['ru'] = p11n[:east_slavic]
84
+ hash['sr'] = p11n[:east_slavic]
78
85
  hash['sv'] = p11n[:one_two_other]
79
86
  hash['sv-SE'] = p11n[:one_two_other]
80
87
  hash['tr'] = p11n[:other]
data/lib/pagy.rb CHANGED
@@ -1,48 +1,66 @@
1
1
  # See Pagy API documentation: https://ddnexus.github.io/pagy/api/pagy
2
- # encoding: utf-8
3
2
  # frozen_string_literal: true
4
3
 
5
4
  require 'pathname'
6
5
 
7
- class Pagy ; VERSION = '3.10.0'
6
+ # main class
7
+ class Pagy
8
+ VERSION = '4.2.0'
8
9
 
9
10
  # Root pathname to get the path of Pagy files like templates or dictionaries
10
- def self.root; @root ||= Pathname.new(__FILE__).dirname.freeze end
11
+ def self.root
12
+ @root ||= Pathname.new(__dir__).freeze
13
+ end
11
14
 
12
15
  # default vars
13
- VARS = { page:1, items:20, outset:0, size:[1,4,4,1], page_param: :page, params:{}, anchor:'', link_extra:'', i18n_key:'pagy.item_name', cycle:false }
16
+ VARS = { page: 1, items: 20, outset: 0, size: [1, 4, 4, 1], page_param: :page, # rubocop:disable Style/MutableConstant
17
+ params: {}, anchor: '', link_extra: '', i18n_key: 'pagy.item_name', cycle: false }
14
18
 
15
19
  attr_reader :count, :page, :items, :vars, :pages, :last, :offset, :from, :to, :prev, :next
16
20
 
21
+ INSTANCE_VARS_MIN = { count: 0, items: 1, page: 1, outset: 0 }.freeze
22
+
17
23
  # Merge and validate the options, do some simple arithmetic and set the instance variables
18
24
  def initialize(vars)
19
- @vars = VARS.merge(vars.delete_if{|_,v| v.nil? || v == '' }) # default vars + cleaned vars
20
- { count:0, items:1, outset:0, page:1 }.each do |k,min| # validate instance variables
21
- (@vars[k] && instance_variable_set(:"@#{k}", @vars[k].to_i) >= min) \
22
- or raise(VariableError.new(self), "expected :#{k} >= #{min}; got #{@vars[k].inspect}")
25
+ @vars = VARS.merge( vars.delete_if{|_,v| v.nil? || v == '' } )
26
+
27
+ INSTANCE_VARS_MIN.each do |name,min|
28
+ raise VariableError.new(self), "expected :#{name} >= #{min}; got #{@vars[name].inspect}" \
29
+ unless @vars[name] && instance_variable_set(:"@#{name}", @vars[name].to_i) >= min
23
30
  end
24
- @pages = @last = [(@count.to_f / @items).ceil, 1].max # cardinal and ordinal meanings
25
- @page <= @last or raise(OverflowError.new(self), "expected :page in 1..#{@last}; got #{@page.inspect}")
26
- @offset = @items * (@page - 1) + @outset # pagination offset + outset (initial offset)
27
- @items = @count - ((@pages-1) * @items) if @page == @last && @count > 0 # adjust items for last non-empty page
28
- @from = @count == 0 ? 0 : @offset+1 - @outset # page begins from item
29
- @to = @count == 0 ? 0 : @offset + @items - @outset # page ends to item
30
- @prev = (@page-1 unless @page == 1) # nil if no prev page
31
- @next = @page == @last ? (1 if @vars[:cycle]) : @page+1 # nil if no next page, 1 if :cycle
31
+ @pages = @last = [(@count.to_f / @items).ceil, 1].max
32
+ raise OverflowError.new(self), "expected :page in 1..#{@last}; got #{@page.inspect}" if @page > @last
33
+
34
+ @offset = @items * (@page - 1) + @outset
35
+ @items = @count - ((@pages-1) * @items) if @page == @last && @count.positive?
36
+ @from = @count.zero? ? 0 : @offset + 1 - @outset
37
+ @to = @count.zero? ? 0 : @offset + @items - @outset
38
+ @prev = (@page-1 unless @page == 1)
39
+ @next = @page == @last ? (1 if @vars[:cycle]) : @page + 1
32
40
  end
33
41
 
34
42
  # Return the array of page numbers and :gap items e.g. [1, :gap, 7, 8, "9", 10, 11, :gap, 36]
35
43
  def series(size=@vars[:size])
36
- (series = []) and size.empty? and return series
37
- 4.times{|i| (size[i]>=0 rescue nil) or raise(VariableError.new(self), "expected 4 items >= 0 in :size; got #{size.inspect}")}
38
- [*0..size[0], *@page-size[1]..@page+size[2], *@last-size[3]+1..@last+1].sort!.each_cons(2) do |a, b|
39
- if a<0 || a==b || a>@last # skip out of range and duplicates
40
- elsif a+1 == b; series.push(a) # no gap -> no additions
41
- elsif a+2 == b; series.push(a, a+1) # 1 page gap -> fill with missing page
42
- else series.push(a, :gap) # n page gap -> add gap
43
- end # skip the end boundary (last+1)
44
- end # shift the start boundary (0) and
45
- series.shift; series[series.index(@page)] = @page.to_s; series # convert the current page to String
44
+ return [] if size.empty?
45
+ raise VariableError.new(self), "expected 4 items >= 0 in :size; got #{size.inspect}" \
46
+ unless size.size == 4 && size.all?{ |num| num >= 0 rescue false } # rubocop:disable Style/RescueModifier
47
+
48
+ series = []
49
+ [ *0..size[0], # initial pages from 0
50
+ *@page-size[1]..@page+size[2], # around current page
51
+ *@last-size[3]+1..@last+1 # final pages till @last+1
52
+ ].sort!.each_cons(2) do |left, right| # sort and loop by 2
53
+ next if left.negative? || left == right # skip out of range and duplicates
54
+ break if left > @last # break if out of @last boundary
55
+ case right
56
+ when left+1 then series.push(left) # no gap -> no additions
57
+ when left+2 then series.push(left, left+1) # 1 page gap -> fill with missing page
58
+ else series.push(left, :gap) # n page gap -> add gap
59
+ end
60
+ end
61
+ series.shift # shift the start boundary (0)
62
+ series[series.index(@page)] = @page.to_s # convert the current page to String
63
+ series
46
64
  end
47
65
 
48
66
  end
data/lib/pagy/backend.rb CHANGED
@@ -1,5 +1,4 @@
1
1
  # See Pagy::Backend API documentation: https://ddnexus.github.io/pagy/api/backend
2
- # encoding: utf-8
3
2
  # frozen_string_literal: true
4
3
 
5
4
  class Pagy
@@ -8,12 +7,14 @@ class Pagy
8
7
 
9
8
  # See also the extras if you need specialized methods to paginate Arrays or other collections
10
9
 
11
- module Backend ; private # the whole module is private so no problem with including it in a controller
10
+
11
+ module Backend
12
+ private # the whole module is private so no problem with including it in a controller
12
13
 
13
14
  # Return Pagy object and items
14
15
  def pagy(collection, vars={})
15
16
  pagy = Pagy.new(pagy_get_vars(collection, vars))
16
- return pagy, pagy_get_items(collection, pagy)
17
+ [ pagy, pagy_get_items(collection, pagy) ]
17
18
  end
18
19
 
19
20
  # Sub-method called only by #pagy: here for easy customization of variables by overriding
@@ -1,4 +1,3 @@
1
- # encoding: utf-8
2
1
  # frozen_string_literal: true
3
2
 
4
3
  require 'pagy'
@@ -7,25 +6,29 @@ class Pagy
7
6
 
8
7
  class Countless < Pagy
9
8
 
9
+ INSTANCE_VARS_MIN = { items: 1, page: 1, outset: 0 }.freeze
10
+
10
11
  # Merge and validate the options, do some simple arithmetic and set a few instance variables
11
- def initialize(vars={})
12
+ def initialize(vars={}) # rubocop:disable Lint/MissingSuper
12
13
  @vars = VARS.merge(vars.delete_if{|_,v| v.nil? || v == '' }) # default vars + cleaned vars (can be overridden)
13
- { items:1, outset:0, page:1 }.each do |k,min| # validate instance variables
14
- (@vars[k] && instance_variable_set(:"@#{k}", @vars[k].to_i) >= min) \
15
- or raise(VariableError.new(self), "expected :#{k} >= #{min}; got #{@vars[k].inspect}")
14
+ INSTANCE_VARS_MIN.each do |k,min| # validate instance variables
15
+ raise VariableError.new(self), "expected :#{k} >= #{min}; got #{@vars[k].inspect}" \
16
+ unless @vars[k] && instance_variable_set(:"@#{k}", @vars[k].to_i) >= min
16
17
  end
17
18
  @offset = @items * (@page - 1) + @outset # pagination offset + outset (initial offset)
18
19
  end
19
20
 
20
21
  # Finalize the instance variables based on the fetched items
21
22
  def finalize(fetched)
22
- fetched == 0 && @page > 1 and raise(OverflowError.new(self), "page #{@page} got no items")
23
+ raise OverflowError.new(self), "page #{@page} got no items" \
24
+ if fetched.zero? && @page > 1
25
+
23
26
  @pages = @last = (fetched > @items ? @page + 1 : @page) # set the @pages and @last
24
- @items = fetched if fetched < @items && fetched > 0 # adjust items for last non-empty page
25
- @from = fetched == 0 ? 0 : @offset+1 - @outset # page begins from item
26
- @to = fetched == 0 ? 0 : @offset + @items - @outset # page ends to item
27
+ @items = fetched if fetched < @items && fetched.positive? # adjust items for last non-empty page
28
+ @from = fetched.zero? ? 0 : @offset + 1 - @outset # page begins from item
29
+ @to = fetched.zero? ? 0 : @offset + @items - @outset # page ends to item
27
30
  @prev = (@page-1 unless @page == 1) # nil if no prev page
28
- @next = @page == @last ? (1 if @vars[:cycle]) : @page+1 # nil if no next page, 1 if :cycle
31
+ @next = @page == @last ? (1 if @vars[:cycle]) : @page + 1 # nil if no next page, 1 if :cycle
29
32
  self
30
33
  end
31
34