pagy 8.6.3 → 9.0.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (102) hide show
  1. checksums.yaml +4 -4
  2. data/apps/calendar.ru +5 -5
  3. data/apps/demo.ru +4 -4
  4. data/apps/keyset_ar.ru +236 -0
  5. data/apps/keyset_s.ru +238 -0
  6. data/apps/rails.ru +5 -5
  7. data/apps/repro.ru +4 -4
  8. data/bin/pagy +4 -2
  9. data/config/pagy.rb +17 -13
  10. data/javascripts/pagy.min.js +2 -2
  11. data/javascripts/pagy.min.js.map +2 -2
  12. data/javascripts/pagy.mjs +2 -2
  13. data/lib/pagy/b64.rb +33 -0
  14. data/lib/pagy/backend.rb +19 -19
  15. data/lib/pagy/calendar/day.rb +1 -1
  16. data/lib/pagy/calendar/month.rb +1 -1
  17. data/lib/pagy/calendar/quarter.rb +1 -1
  18. data/lib/pagy/calendar/unit.rb +7 -10
  19. data/lib/pagy/calendar/week.rb +1 -1
  20. data/lib/pagy/calendar/year.rb +1 -1
  21. data/lib/pagy/calendar.rb +5 -5
  22. data/lib/pagy/countless.rb +10 -14
  23. data/lib/pagy/extras/arel.rb +2 -10
  24. data/lib/pagy/extras/array.rb +5 -10
  25. data/lib/pagy/extras/bootstrap.rb +5 -5
  26. data/lib/pagy/extras/bulma.rb +10 -7
  27. data/lib/pagy/extras/calendar.rb +4 -5
  28. data/lib/pagy/extras/countless.rb +8 -13
  29. data/lib/pagy/extras/elasticsearch_rails.rb +16 -25
  30. data/lib/pagy/extras/gearbox.rb +18 -18
  31. data/lib/pagy/extras/headers.rb +25 -24
  32. data/lib/pagy/extras/js_tools.rb +4 -4
  33. data/lib/pagy/extras/jsonapi.rb +26 -19
  34. data/lib/pagy/extras/keyset.rb +30 -0
  35. data/lib/pagy/extras/limit.rb +63 -0
  36. data/lib/pagy/extras/meilisearch.rb +9 -17
  37. data/lib/pagy/extras/metadata.rb +2 -2
  38. data/lib/pagy/extras/overflow.rb +5 -5
  39. data/lib/pagy/extras/pagy.rb +16 -16
  40. data/lib/pagy/extras/searchkick.rb +9 -17
  41. data/lib/pagy/extras/size.rb +1 -1
  42. data/lib/pagy/extras/standalone.rb +6 -6
  43. data/lib/pagy/extras/trim.rb +2 -2
  44. data/lib/pagy/frontend.rb +32 -33
  45. data/lib/pagy/i18n.rb +2 -2
  46. data/lib/pagy/keyset/active_record.rb +38 -0
  47. data/lib/pagy/keyset/sequel.rb +51 -0
  48. data/lib/pagy/keyset.rb +98 -0
  49. data/lib/pagy/shared_methods.rb +27 -0
  50. data/lib/pagy/url_helpers.rb +4 -4
  51. data/lib/pagy.rb +51 -65
  52. data/locales/ar.yml +1 -1
  53. data/locales/be.yml +1 -1
  54. data/locales/bg.yml +1 -1
  55. data/locales/bs.yml +1 -1
  56. data/locales/ca.yml +1 -1
  57. data/locales/ckb.yml +1 -1
  58. data/locales/cs.yml +1 -1
  59. data/locales/da.yml +1 -1
  60. data/locales/de.yml +1 -1
  61. data/locales/en.yml +1 -1
  62. data/locales/es.yml +1 -1
  63. data/locales/fr.yml +1 -1
  64. data/locales/hr.yml +1 -1
  65. data/locales/id.yml +1 -1
  66. data/locales/it.yml +1 -1
  67. data/locales/ja.yml +1 -1
  68. data/locales/km.yml +1 -1
  69. data/locales/ko.yml +1 -1
  70. data/locales/nb.yml +1 -1
  71. data/locales/nl.yml +1 -1
  72. data/locales/nn.yml +1 -1
  73. data/locales/pl.yml +1 -1
  74. data/locales/pt-BR.yml +1 -1
  75. data/locales/pt.yml +1 -1
  76. data/locales/ru.yml +1 -1
  77. data/locales/sr.yml +1 -1
  78. data/locales/sv-SE.yml +1 -1
  79. data/locales/sv.yml +1 -1
  80. data/locales/sw.yml +1 -1
  81. data/locales/ta.yml +1 -1
  82. data/locales/tr.yml +1 -1
  83. data/locales/uk.yml +1 -1
  84. data/locales/vi.yml +1 -1
  85. data/locales/zh-CN.yml +1 -1
  86. data/locales/zh-HK.yml +1 -1
  87. data/locales/zh-TW.yml +1 -1
  88. metadata +12 -24
  89. data/apps/tmp/calendar.sqlite3 +0 -0
  90. data/apps/tmp/calendar.sqlite3-shm +0 -0
  91. data/apps/tmp/calendar.sqlite3-wal +0 -0
  92. data/apps/tmp/local_secret.txt +0 -1
  93. data/apps/tmp/pagy-keyset.sqlite3 +0 -0
  94. data/apps/tmp/pagy-keyset.sqlite3-shm +0 -0
  95. data/apps/tmp/pagy-keyset.sqlite3-wal +0 -0
  96. data/javascripts/pagy-module.js +0 -100
  97. data/javascripts/pagy.js +0 -4
  98. data/lib/pagy/extras/foundation.rb +0 -95
  99. data/lib/pagy/extras/items.rb +0 -64
  100. data/lib/pagy/extras/materialize.rb +0 -100
  101. data/lib/pagy/extras/semantic.rb +0 -94
  102. data/lib/pagy/extras/uikit.rb +0 -98
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2504119986405246907631188b14c4e366eb2247f7fdecdd6a14f187dbe56674
4
- data.tar.gz: 9a355076182f3446c64279c7e158f9d826963c472e2e9b17e497cb863bdcadcf
3
+ metadata.gz: 795b2037fdfb671d345ec7c4d3fa5c579d5f5723c9bf08edefeea659d5358529
4
+ data.tar.gz: 3d56cc37b697c409520e20e48eb1b60205ab03273197751055718e19acad17ac
5
5
  SHA512:
6
- metadata.gz: 30b2e50c83d38b52d186c8f53615b6fe8491fd22ace660f351cca2993ed98c25ab3a8b61117e57c5f3b465f28daba3ef2efe0cf0332c0e2cc4a09d8986cfc217
7
- data.tar.gz: 01cf06ebc92ce69ccc50252d259057d14b56b0149e9e982dbd52e8e1bd1fb889a7319dcf497df5c3c2d3b388372e5444520054eda76cbefbe908d7debb20f73e
6
+ metadata.gz: 567662eb87b2b042ae4044452546abd1d123e67d29000e1695c9c6402d229192761e7cb5613c8535d9ded2c79ac7374af8c8c599c9d3157a5824ce12052445ce
7
+ data.tar.gz: 9f5be0f4f62ca99d5ed083a3ecaa70544b42d3a15b99bf8990748dc2f703d2869e67425f960f977ed503d286c9b7e8245c9f8f101b4cfb533730a60908007c39
data/apps/calendar.ru CHANGED
@@ -15,7 +15,7 @@
15
15
  # DOC
16
16
  # https://ddnexus.github.io/pagy/playground/#5-calendar-app
17
17
 
18
- VERSION = '8.6.3'
18
+ VERSION = '9.0.5'
19
19
 
20
20
  # Gemfile
21
21
  require 'bundler/inline'
@@ -64,8 +64,6 @@ require 'pagy/extras/bootstrap'
64
64
  Pagy::DEFAULT.freeze
65
65
 
66
66
  # Groupdate initializer (https://github.com/ankane/groupdate)
67
- # Groupdate does not support the time zone with sqlite, so for this demo we can live with UTC
68
- Groupdate.time_zone = false
69
67
  # Groupdate week_start default is :sunday, while rails and pagy default to :monday
70
68
  Groupdate.week_start = :monday
71
69
 
@@ -120,8 +118,10 @@ class EventsController < ActionController::Base
120
118
  end
121
119
 
122
120
  def index
123
- # We need UTC to work with the limitation of groupdate with sqlite
124
- Time.zone = 'UTC'
121
+ # Groupdate does not support time zones with SQLite.
122
+ # 'UTC' does not work on certain machines config (pulling the actual local time zone utc_offset)
123
+ # so for this demo we use a different zone with utc_offset 0
124
+ Time.zone = 'GMT'
125
125
  # Default calendar
126
126
  # The conf Hash defines the pagy objects variables keyed by calendar unit and the final pagy standard object
127
127
  # The :skip is an optional and arbitrarily named param that skips the calendar pagination and uses only the pagy
data/apps/demo.ru CHANGED
@@ -18,7 +18,7 @@
18
18
  # DOC
19
19
  # https://ddnexus.github.io/pagy/playground/#3-demo-app
20
20
 
21
- VERSION = '8.6.3'
21
+ VERSION = '9.0.5'
22
22
 
23
23
  require 'bundler/inline'
24
24
  require 'bundler'
@@ -41,7 +41,7 @@ STYLES = { pagy: { extra: 'pagy', prefix: '', css_anchor: 'pagy-scss' },
41
41
  STYLES.each_key do |style|
42
42
  require "pagy/extras/#{STYLES[style][:extra] || style}"
43
43
  end
44
- require 'pagy/extras/items'
44
+ require 'pagy/extras/limit'
45
45
  require 'pagy/extras/trim'
46
46
  Pagy::DEFAULT[:trim_extra] = false # opt-in trim
47
47
 
@@ -403,8 +403,8 @@ for details</p>
403
403
  <%= highlight(html) %>
404
404
 
405
405
  <% if style.match(/pagy|tailwind/) %>
406
- <h2>pagy_items_selector_js</h2>
407
- <%= html = pagy_items_selector_js(@pagy, id: 'items-selector-js') %>
406
+ <h2>pagy_limit_selector_js</h2>
407
+ <%= html = pagy_limit_selector_js(@pagy, id: 'limit-selector-js') %>
408
408
  <%= highlight(html) %>
409
409
 
410
410
  <h2>pagy_prev_a / pagy_next_a</h2>
data/apps/keyset_ar.ru ADDED
@@ -0,0 +1,236 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Starting point to reproduce keyset related pagy issues
4
+
5
+ # DEV USAGE
6
+ # pagy clone rails
7
+ # pagy ./keyset.ru
8
+
9
+ # URL
10
+ # http://0.0.0.0:8000
11
+
12
+ # HELP
13
+ # pagy -h
14
+
15
+ # DOC
16
+ # https://ddnexus.github.io/pagy/playground/#5-keyset-app
17
+
18
+ VERSION = '8.6.2'
19
+
20
+ # Gemfile
21
+ require 'bundler/inline'
22
+ require 'bundler'
23
+ Bundler.configure
24
+ gemfile(ENV['PAGY_INSTALL_BUNDLE'] == 'true') do
25
+ source 'https://rubygems.org'
26
+ gem 'oj'
27
+ gem 'puma'
28
+ gem 'rails'
29
+ # activerecord/sqlite3_adapter.rb probably useless) constraint !!!
30
+ # https://github.com/rails/rails/blame/v7.1.3.4/activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb#L14
31
+ gem 'sqlite3', '~> 1.4.0'
32
+ end
33
+
34
+ # require 'rails/all' # too much stuff
35
+ require 'action_controller/railtie'
36
+ require 'active_record'
37
+
38
+ OUTPUT = Rails.env.showcase? ? IO::NULL : $stdout
39
+
40
+ # Rails config
41
+ class PagyKeyset < Rails::Application # :nodoc:
42
+ config.root = __dir__
43
+ config.session_store :cookie_store, key: 'cookie_store_key'
44
+ Rails.application.credentials.secret_key_base = 'absolute_secret'
45
+
46
+ config.logger = Logger.new(OUTPUT)
47
+ Rails.logger = config.logger
48
+
49
+ routes.draw do
50
+ root to: 'pets#index'
51
+ end
52
+ end
53
+
54
+ dir = Rails.env.development? ? '.' : Dir.pwd # app dir in dev or pwd otherwise
55
+ unless File.writable?(dir)
56
+ warn "ERROR: directory #{dir.inspect} is not writable (the pagy-rails-app needs to create DB files)"
57
+ exit 1
58
+ end
59
+
60
+ # Pagy initializer
61
+ require 'pagy/extras/pagy'
62
+ require 'pagy/extras/limit'
63
+ require 'pagy/extras/keyset'
64
+ Pagy::DEFAULT[:limit] = 10
65
+ Pagy::DEFAULT.freeze
66
+
67
+ PETS = <<~PETS
68
+ Luna | dog | 2018-03-10
69
+ Coco | cat | 2019-05-15
70
+ Dodo | dog | 2020-06-25
71
+ Wiki | bird | 2018-03-12
72
+ Baby | rabbit | 2020-01-13
73
+ Neki | horse | 2021-07-20
74
+ Tino | donkey | 2019-06-18
75
+ Plot | cat | 2022-09-21
76
+ Riki | cat | 2018-09-14
77
+ Susi | horse | 2018-10-26
78
+ Coco | pig | 2020-08-29
79
+ Momo | bird | 2023-08-25
80
+ Lili | cat | 2021-07-22
81
+ Beli | pig | 2020-07-26
82
+ Rocky | bird | 2022-08-19
83
+ Vyvy | dog | 2018-05-16
84
+ Susi | horse | 2024-01-25
85
+ Ella | cat | 2020-02-20
86
+ Rocky | dog | 2019-09-19
87
+ Juni | rabbit | 2020-08-24
88
+ Coco | bird | 2021-03-17
89
+ Susi | dog | 2021-07-28
90
+ Luna | horse | 2023-05-14
91
+ Gigi | pig | 2022-05-19
92
+ Coco | cat | 2020-02-20
93
+ Nino | donkey | 2019-06-17
94
+ Luna | cat | 2022-02-09
95
+ Popi | dog | 2020-09-26
96
+ Lili | pig | 2022-06-18
97
+ Mina | horse | 2021-04-21
98
+ Susi | rabbit | 2023-05-18
99
+ Toni | donkey | 2018-06-22
100
+ Rocky | horse | 2019-09-28
101
+ Lili | cat | 2019-03-18
102
+ Roby | cat | 2022-06-19
103
+ Anto | horse | 2022-08-18
104
+ Susi | pig | 2021-04-21
105
+ Boly | bird | 2020-03-29
106
+ Sky | cat | 2023-07-19
107
+ Lili | dog | 2020-01-28
108
+ Fami | snake | 2023-04-27
109
+ Lopi | pig | 2019-06-19
110
+ Rocky | snake | 2022-03-13
111
+ Denis | dog | 2022-06-19
112
+ Maca | cat | 2022-06-19
113
+ Luna | dog | 2022-08-15
114
+ Jeme | horse | 2019-08-08
115
+ Sary | bird | 2023-04-29
116
+ Rocky | bird | 2023-05-14
117
+ Coco | dog | 2023-05-27
118
+ PETS
119
+
120
+ # Activerecord initializer
121
+ ActiveRecord::Base.logger = Logger.new(OUTPUT)
122
+ ActiveRecord::Base.establish_connection(adapter: 'sqlite3', database: "#{dir}/tmp/pagy-keyset-ar.sqlite3")
123
+ ActiveRecord::Schema.define do
124
+ create_table :pets, force: true do |t|
125
+ t.string :animal
126
+ t.string :name
127
+ t.date :birthdate
128
+ end
129
+ end
130
+
131
+ # Models
132
+ class Pet < ActiveRecord::Base
133
+ end
134
+
135
+ # DB seed
136
+ pets = []
137
+ PETS.each_line(chomp: true) do |pet|
138
+ name, animal, birthdate = pet.split('|').map(&:strip)
139
+ pets << { name:, animal:, birthdate: }
140
+ end
141
+ Pet.insert_all(pets)
142
+
143
+ # Helpers
144
+ module PetsHelper
145
+ include Pagy::Frontend
146
+
147
+ def order_symbol(dir)
148
+ { asc: '&#x2197;', desc: '&#x2198;' }[dir]
149
+ end
150
+ end
151
+
152
+ # Controllers
153
+ class PetsController < ActionController::Base # :nodoc:
154
+ include Rails.application.routes.url_helpers
155
+ include Pagy::Backend
156
+
157
+ def index
158
+ Time.zone = 'UTC'
159
+
160
+ @order = { animal: :asc, name: :asc, birthdate: :desc, id: :asc }
161
+ @pagy, @pets = pagy_keyset(Pet.order(@order))
162
+ render inline: TEMPLATE
163
+ end
164
+ end
165
+
166
+ TEMPLATE = <<~ERB
167
+ <!DOCTYPE html>
168
+ <html lang="en">
169
+ <html>
170
+ <head>
171
+ <title>Pagy Keyset App</title>
172
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
173
+ <style type="text/css">
174
+ @media screen { html, body {
175
+ font-size: 1rem;
176
+ line-height: 1.2s;
177
+ padding: 0;
178
+ margin: 0;
179
+ } }
180
+ body {
181
+ background: white !important;
182
+ margin: 0 !important;
183
+ font-family: sans-serif !important;
184
+ }
185
+ .content {
186
+ padding: 1rem 1.5rem 2rem !important;
187
+ }
188
+
189
+ <%== Pagy.root.join('stylesheets', 'pagy.css').read %>
190
+ </style>
191
+ </head>
192
+
193
+ <body>
194
+
195
+ <div class="content">
196
+ <h1>Pagy Keyset App</h1>
197
+ <p>Self-contained, standalone Rails app usable to easily reproduce any keyset related pagy issue with ActiveRecord sets.</p>
198
+ <p>Please, report the following versions in any new issue.</p>
199
+ <h2>Versions</h2>
200
+ <ul>
201
+ <li>Ruby: <%== RUBY_VERSION %></li>
202
+ <li>Rack: <%== Rack::RELEASE %></li>
203
+ <li>Rails: <%== Rails.version %></li>
204
+ <li>Pagy: <%== Pagy::VERSION %></li>
205
+ </ul>
206
+
207
+ <h3>Collection</h3>
208
+ <div id="records" class="collection">
209
+ <table border="1" cellspacing="0" cellpadding="3">
210
+ <tr>
211
+ <th>animal <%== order_symbol(@order[:animal]) %></th>
212
+ <th>name <%== order_symbol(@order[:name]) %></th>
213
+ <th>birthdate <%== order_symbol(@order[:birthdate]) %></th>
214
+ <th>id <%== order_symbol(@order[:id]) %></th>
215
+ </tr>
216
+ <% @pets.each do |pet| %>
217
+ <tr>
218
+ <td><%= pet.animal %></td>
219
+ <td><%= pet.name %></td>
220
+ <td><%= pet.birthdate %></td>
221
+ <td><%= pet.id %></td>
222
+ </tr>
223
+ <% end %>
224
+ </table>
225
+ </div>
226
+ <p>
227
+ <nav class="pagy" id="next" aria-label="Pagy next">
228
+ <%== pagy_next_a(@pagy, text: 'Next page &gt;') %>
229
+ </nav>
230
+ </div>
231
+
232
+ </body>
233
+ </html>
234
+ ERB
235
+
236
+ run PagyKeyset
data/apps/keyset_s.ru ADDED
@@ -0,0 +1,238 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Starting point to reproduce keyset related pagy issues
4
+
5
+ # DEV USAGE
6
+ # pagy clone rails
7
+ # pagy ./keyset.ru
8
+
9
+ # URL
10
+ # http://0.0.0.0:8000
11
+
12
+ # HELP
13
+ # pagy -h
14
+
15
+ # DOC
16
+ # https://ddnexus.github.io/pagy/playground/#5-keyset-app
17
+
18
+ VERSION = '8.6.2'
19
+
20
+ # Gemfile
21
+ require 'bundler/inline'
22
+ require 'bundler'
23
+ Bundler.configure
24
+ gemfile(ENV['PAGY_INSTALL_BUNDLE'] == 'true') do
25
+ source 'https://rubygems.org'
26
+ gem 'oj'
27
+ gem 'puma'
28
+ gem 'rails'
29
+ # activerecord/sqlite3_adapter.rb probably useless) constraint !!!
30
+ # https://github.com/rails/rails/blame/v7.1.3.4/activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb#L14
31
+ gem 'sqlite3', '~> 1.4.0'
32
+ gem 'sequel'
33
+ end
34
+
35
+ # require 'rails/all' # too much stuff
36
+ require 'action_controller/railtie'
37
+ require 'sequel'
38
+
39
+ OUTPUT = Rails.env.showcase? ? IO::NULL : $stdout
40
+
41
+ # Rails config
42
+ class PagyKeyset < Rails::Application # :nodoc:
43
+ config.root = __dir__
44
+ config.session_store :cookie_store, key: 'cookie_store_key'
45
+ Rails.application.credentials.secret_key_base = 'absolute_secret'
46
+
47
+ config.logger = Logger.new(OUTPUT)
48
+ Rails.logger = config.logger
49
+
50
+ routes.draw do
51
+ root to: 'pets#index'
52
+ end
53
+ end
54
+
55
+ dir = Rails.env.development? ? '.' : Dir.pwd # app dir in dev or pwd otherwise
56
+ unless File.writable?(dir)
57
+ warn "ERROR: directory #{dir.inspect} is not writable (the pagy-rails-app needs to create DB files)"
58
+ exit 1
59
+ end
60
+
61
+ # Pagy initializer
62
+ require 'pagy/extras/pagy'
63
+ require 'pagy/extras/limit'
64
+ require 'pagy/extras/keyset'
65
+ Pagy::DEFAULT[:limit] = 10
66
+ Pagy::DEFAULT.freeze
67
+
68
+ PETS = <<~PETS
69
+ Luna | dog | 2018-03-10
70
+ Coco | cat | 2019-05-15
71
+ Dodo | dog | 2020-06-25
72
+ Wiki | bird | 2018-03-12
73
+ Baby | rabbit | 2020-01-13
74
+ Neki | horse | 2021-07-20
75
+ Tino | donkey | 2019-06-18
76
+ Plot | cat | 2022-09-21
77
+ Riki | cat | 2018-09-14
78
+ Susi | horse | 2018-10-26
79
+ Coco | pig | 2020-08-29
80
+ Momo | bird | 2023-08-25
81
+ Lili | cat | 2021-07-22
82
+ Beli | pig | 2020-07-26
83
+ Rocky | bird | 2022-08-19
84
+ Vyvy | dog | 2018-05-16
85
+ Susi | horse | 2024-01-25
86
+ Ella | cat | 2020-02-20
87
+ Rocky | dog | 2019-09-19
88
+ Juni | rabbit | 2020-08-24
89
+ Coco | bird | 2021-03-17
90
+ Susi | dog | 2021-07-28
91
+ Luna | horse | 2023-05-14
92
+ Gigi | pig | 2022-05-19
93
+ Coco | cat | 2020-02-20
94
+ Nino | donkey | 2019-06-17
95
+ Luna | cat | 2022-02-09
96
+ Popi | dog | 2020-09-26
97
+ Lili | pig | 2022-06-18
98
+ Mina | horse | 2021-04-21
99
+ Susi | rabbit | 2023-05-18
100
+ Toni | donkey | 2018-06-22
101
+ Rocky | horse | 2019-09-28
102
+ Lili | cat | 2019-03-18
103
+ Roby | cat | 2022-06-19
104
+ Anto | horse | 2022-08-18
105
+ Susi | pig | 2021-04-21
106
+ Boly | bird | 2020-03-29
107
+ Sky | cat | 2023-07-19
108
+ Lili | dog | 2020-01-28
109
+ Fami | snake | 2023-04-27
110
+ Lopi | pig | 2019-06-19
111
+ Rocky | snake | 2022-03-13
112
+ Denis | dog | 2022-06-19
113
+ Maca | cat | 2022-06-19
114
+ Luna | dog | 2022-08-15
115
+ Jeme | horse | 2019-08-08
116
+ Sary | bird | 2023-04-29
117
+ Rocky | bird | 2023-05-14
118
+ Coco | dog | 2023-05-27
119
+ PETS
120
+
121
+ Sequel.default_timezone = :utc
122
+
123
+ ## Sequel initializer
124
+ DB = Sequel.connect(adapter: 'sqlite', user: 'root', password: 'password', host: 'localhost', port: '3306',
125
+ database: "#{dir}/tmp/pagy-keyset-s.sqlite3", max_connections: 10, loggers: [Logger.new(OUTPUT)])
126
+
127
+ DB.create_table! :pets do
128
+ primary_key :id
129
+ String :animal, unique: false, null: false
130
+ String :name, unique: false, null: false
131
+ Date :birthdate, unique: false, null: false
132
+ end
133
+
134
+ dataset = DB[:pets]
135
+
136
+ PETS.each_line(chomp: true) do |pet|
137
+ name, animal, birthdate = pet.split('|').map(&:strip)
138
+ dataset.insert(name:, animal:, birthdate:)
139
+ end
140
+
141
+ # Models
142
+ class Pet < Sequel::Model
143
+ end
144
+
145
+ # Helpers
146
+ module PetsHelper
147
+ include Pagy::Frontend
148
+
149
+ def order_symbol(dir)
150
+ { asc: '&#x2197;', desc: '&#x2198;' }[dir]
151
+ end
152
+ end
153
+
154
+ # Controllers
155
+ class PetsController < ActionController::Base # :nodoc:
156
+ include Rails.application.routes.url_helpers
157
+ include Pagy::Backend
158
+
159
+ def index
160
+ Time.zone = 'UTC'
161
+
162
+ @order = { animal: :asc, name: :asc, birthdate: :desc, id: :asc }
163
+ @pagy, @pets = pagy_keyset(Pet.order(:animal, :name, Sequel.desc(:birthdate), :id))
164
+ render inline: TEMPLATE
165
+ end
166
+ end
167
+
168
+ TEMPLATE = <<~ERB
169
+ <!DOCTYPE html>
170
+ <html lang="en">
171
+ <html>
172
+ <head>
173
+ <title>Pagy Keyset App</title>
174
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
175
+ <style type="text/css">
176
+ @media screen { html, body {
177
+ font-size: 1rem;
178
+ line-height: 1.2s;
179
+ padding: 0;
180
+ margin: 0;
181
+ } }
182
+ body {
183
+ background: white !important;
184
+ margin: 0 !important;
185
+ font-family: sans-serif !important;
186
+ }
187
+ .content {
188
+ padding: 1rem 1.5rem 2rem !important;
189
+ }
190
+
191
+ <%== Pagy.root.join('stylesheets', 'pagy.css').read %>
192
+ </style>
193
+ </head>
194
+
195
+ <body>
196
+
197
+ <div class="content">
198
+ <h1>Pagy Keyset App</h1>
199
+ <p>Self-contained, standalone Rails app usable to easily reproduce any keyset related pagy issue with Sequel sets.</p>
200
+ <p>Please, report the following versions in any new issue.</p>
201
+ <h2>Versions</h2>
202
+ <ul>
203
+ <li>Ruby: <%== RUBY_VERSION %></li>
204
+ <li>Rack: <%== Rack::RELEASE %></li>
205
+ <li>Rails: <%== Rails.version %></li>
206
+ <li>Pagy: <%== Pagy::VERSION %></li>
207
+ </ul>
208
+
209
+ <h3>Collection</h3>
210
+ <div id="records" class="collection">
211
+ <table border="1" cellspacing="0" cellpadding="3">
212
+ <tr>
213
+ <th>animal <%== order_symbol(@order[:animal]) %></th>
214
+ <th>name <%== order_symbol(@order[:name]) %></th>
215
+ <th>birthdate <%== order_symbol(@order[:birthdate]) %></th>
216
+ <th>id <%== order_symbol(@order[:id]) %></th>
217
+ </tr>
218
+ <% @pets.each do |pet| %>
219
+ <tr>
220
+ <td><%= pet.animal %></td>
221
+ <td><%= pet.name %></td>
222
+ <td><%= pet.birthdate %></td>
223
+ <td><%= pet.id %></td>
224
+ </tr>
225
+ <% end %>
226
+ </table>
227
+ </div>
228
+ <p>
229
+ <nav class="pagy" id="next" aria-label="Pagy next">
230
+ <%== pagy_next_a(@pagy, text: 'Next page &gt;') %>
231
+ </nav>
232
+ </div>
233
+
234
+ </body>
235
+ </html>
236
+ ERB
237
+
238
+ run PagyKeyset
data/apps/rails.ru CHANGED
@@ -15,7 +15,7 @@
15
15
  # DOC
16
16
  # https://ddnexus.github.io/pagy/playground/#2-rails-app
17
17
 
18
- VERSION = '8.6.3'
18
+ VERSION = '9.0.5'
19
19
 
20
20
  # Gemfile
21
21
  require 'bundler/inline'
@@ -61,9 +61,9 @@ end
61
61
 
62
62
  # Pagy initializer
63
63
  require 'pagy/extras/pagy'
64
- require 'pagy/extras/items'
64
+ require 'pagy/extras/limit'
65
65
  require 'pagy/extras/overflow'
66
- Pagy::DEFAULT[:items] = 10
66
+ Pagy::DEFAULT[:limit] = 10
67
67
  Pagy::DEFAULT[:overflow] = :empty_page
68
68
  Pagy::DEFAULT.freeze
69
69
 
@@ -200,8 +200,8 @@ TEMPLATE = <<~ERB
200
200
  <h4>pagy_combo_nav_js</h4>
201
201
  <%== pagy_combo_nav_js(@pagy, id: 'combo-nav-js', aria_label: 'Pages combo_nav_js') %>
202
202
 
203
- <h4>pagy_items_selector_js</h4>
204
- <%== pagy_items_selector_js(@pagy, id: 'items-selector-js') %>
203
+ <h4>pagy_limit_selector_js</h4>
204
+ <%== pagy_limit_selector_js(@pagy, id: 'limit-selector-js') %>
205
205
 
206
206
  <h4>pagy_info</h4>
207
207
  <%== pagy_info(@pagy, id: 'pagy-info') %>
data/apps/repro.ru CHANGED
@@ -15,7 +15,7 @@
15
15
  # DOC
16
16
  # https://ddnexus.github.io/pagy/playground/#1-repro-app
17
17
 
18
- VERSION = '8.6.3'
18
+ VERSION = '9.0.5'
19
19
 
20
20
  require 'bundler/inline'
21
21
  require 'bundler'
@@ -31,7 +31,7 @@ end
31
31
  # Edit this section adding/removing the extras and Pagy::DEFAULT as needed
32
32
  # pagy initializer
33
33
  require 'pagy/extras/pagy'
34
- require 'pagy/extras/items'
34
+ require 'pagy/extras/limit'
35
35
  require 'pagy/extras/overflow'
36
36
  Pagy::DEFAULT[:overflow] = :empty_page
37
37
  Pagy::DEFAULT.freeze
@@ -169,8 +169,8 @@ __END__
169
169
  <h4>pagy_combo_nav_js</h4>
170
170
  <%= pagy_combo_nav_js(@pagy, id: 'combo-nav-js', aria_label: 'Pages combo_nav_js') %>
171
171
 
172
- <h4>pagy_items_selector_js</h4>
173
- <%= pagy_items_selector_js(@pagy, id: 'items-selector-js') %>
172
+ <h4>pagy_limit_selector_js</h4>
173
+ <%= pagy_limit_selector_js(@pagy, id: 'limit-selector-js') %>
174
174
 
175
175
  <h4>pagy_info</h4>
176
176
  <%= pagy_info(@pagy, id: 'pagy-info') %>
data/bin/pagy CHANGED
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env ruby
2
2
  # frozen_string_literal: true
3
3
 
4
- VERSION = '8.6.3'
5
- APPS = %w[repro rails demo calendar].freeze
4
+ VERSION = '9.0.5'
5
+ APPS = %w[repro rails demo calendar keyset_ar keyset_s].freeze
6
6
  LINUX = RbConfig::CONFIG['host_os'].include?('linux')
7
7
  HOST = '0.0.0.0'
8
8
  PORT = '8000'
@@ -17,6 +17,8 @@ opts = Optimist.options do
17
17
  rails Reproduce rails related issues
18
18
  demo Showcase all the helpers and styles
19
19
  calendar Showcase the calendar; reproduce related issues
20
+ keyset_ar Showcase the keyset ActiveRecord pagination
21
+ keyset_s Showcase the keyset Sequel pagination
20
22
  USAGE
21
23
  pagy APP [options] Showcase APP from the installed gem
22
24
  pagy clone APP Clone APP to the current dir