pagy 9.3.5 → 43.0.0.rc1

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.
Files changed (167) hide show
  1. checksums.yaml +4 -4
  2. data/apps/calendar.ru +547 -551
  3. data/apps/demo.ru +221 -178
  4. data/apps/index.rb +3 -1
  5. data/apps/keynav.ru +258 -0
  6. data/apps/{keyset_ar.ru → keyset.ru} +27 -32
  7. data/apps/{keyset_s.ru → keyset_sequel.ru} +24 -29
  8. data/apps/rails.ru +51 -48
  9. data/apps/repro.ru +46 -43
  10. data/bin/pagy +20 -21
  11. data/config/pagy.rb +35 -207
  12. data/javascripts/ai_widget.js +76 -0
  13. data/javascripts/pagy.js +151 -0
  14. data/javascripts/pagy.js.map +10 -0
  15. data/javascripts/pagy.min.js +1 -4
  16. data/javascripts/pagy.mjs +111 -63
  17. data/javascripts/wand.js +1166 -0
  18. data/lib/pagy/classes/calendar/calendar.rb +98 -0
  19. data/lib/pagy/{calendar → classes/calendar}/day.rb +7 -11
  20. data/lib/pagy/{calendar → classes/calendar}/month.rb +5 -10
  21. data/lib/pagy/{calendar → classes/calendar}/quarter.rb +10 -15
  22. data/lib/pagy/classes/calendar/unit.rb +92 -0
  23. data/lib/pagy/{calendar → classes/calendar}/week.rb +5 -9
  24. data/lib/pagy/{calendar → classes/calendar}/year.rb +5 -6
  25. data/lib/pagy/classes/exceptions.rb +33 -0
  26. data/lib/pagy/classes/keyset/active_record.rb +11 -0
  27. data/lib/pagy/classes/keyset/adapters/active_record.rb +50 -0
  28. data/lib/pagy/classes/keyset/adapters/sequel.rb +63 -0
  29. data/lib/pagy/classes/keyset/keynav/active_record.rb +13 -0
  30. data/lib/pagy/classes/keyset/keynav/sequel.rb +13 -0
  31. data/lib/pagy/classes/keyset/keynav.rb +77 -0
  32. data/lib/pagy/classes/keyset/keyset.rb +126 -0
  33. data/lib/pagy/classes/keyset/sequel.rb +11 -0
  34. data/lib/pagy/classes/offset/countless.rb +56 -0
  35. data/lib/pagy/classes/offset/offset.rb +54 -0
  36. data/lib/pagy/classes/offset/search.rb +38 -0
  37. data/lib/pagy/classes/request.rb +36 -0
  38. data/lib/pagy/modules/abilities/configurable.rb +36 -0
  39. data/lib/pagy/modules/abilities/linkable.rb +59 -0
  40. data/lib/pagy/modules/abilities/rangeable.rb +15 -0
  41. data/lib/pagy/modules/abilities/shiftable.rb +12 -0
  42. data/lib/pagy/{b64.rb → modules/b64.rb} +3 -7
  43. data/lib/pagy/modules/console.rb +38 -0
  44. data/lib/pagy/modules/i18n/i18n.rb +48 -0
  45. data/lib/pagy/modules/i18n/p11n/arabic.rb +29 -0
  46. data/lib/pagy/modules/i18n/p11n/east_slavic.rb +26 -0
  47. data/lib/pagy/modules/i18n/p11n/one_other.rb +15 -0
  48. data/lib/pagy/modules/i18n/p11n/one_upto_two_other.rb +15 -0
  49. data/lib/pagy/modules/i18n/p11n/other.rb +13 -0
  50. data/lib/pagy/modules/i18n/p11n/polish.rb +26 -0
  51. data/lib/pagy/modules/i18n/p11n/west_slavic.rb +22 -0
  52. data/lib/pagy/modules/i18n/p11n.rb +16 -0
  53. data/lib/pagy/modules/searcher.rb +20 -0
  54. data/lib/pagy/toolbox/helpers/anchor_tags.rb +25 -0
  55. data/lib/pagy/toolbox/helpers/bootstrap/input_nav_js.rb +24 -0
  56. data/lib/pagy/toolbox/helpers/bootstrap/previous_next_html.rb +18 -0
  57. data/lib/pagy/toolbox/helpers/bootstrap/series_nav.rb +29 -0
  58. data/lib/pagy/toolbox/helpers/bootstrap/series_nav_js.rb +21 -0
  59. data/lib/pagy/toolbox/helpers/bulma/input_nav_js.rb +21 -0
  60. data/lib/pagy/toolbox/helpers/bulma/previous_next_html.rb +19 -0
  61. data/lib/pagy/toolbox/helpers/bulma/series_nav.rb +28 -0
  62. data/lib/pagy/toolbox/helpers/bulma/series_nav_js.rb +20 -0
  63. data/lib/pagy/toolbox/helpers/data_hash.rb +26 -0
  64. data/lib/pagy/toolbox/helpers/headers_hash.rb +20 -0
  65. data/lib/pagy/toolbox/helpers/info_tag.rb +26 -0
  66. data/lib/pagy/toolbox/helpers/input_nav_js.rb +19 -0
  67. data/lib/pagy/toolbox/helpers/limit_tag_js.rb +23 -0
  68. data/lib/pagy/toolbox/helpers/loader.rb +33 -0
  69. data/lib/pagy/toolbox/helpers/page_url.rb +23 -0
  70. data/lib/pagy/toolbox/helpers/series_nav.rb +29 -0
  71. data/lib/pagy/toolbox/helpers/series_nav_js.rb +19 -0
  72. data/lib/pagy/toolbox/helpers/support/a_lambda.rb +34 -0
  73. data/lib/pagy/toolbox/helpers/support/data_pagy_attribute.rb +15 -0
  74. data/lib/pagy/toolbox/helpers/support/nav_aria_label_attribute.rb +12 -0
  75. data/lib/pagy/toolbox/helpers/support/series.rb +38 -0
  76. data/lib/pagy/toolbox/helpers/support/wrap_input_nav_js.rb +20 -0
  77. data/lib/pagy/toolbox/helpers/support/wrap_series_nav.rb +17 -0
  78. data/lib/pagy/toolbox/helpers/support/wrap_series_nav_js.rb +36 -0
  79. data/lib/pagy/toolbox/helpers/urls_hash.rb +13 -0
  80. data/lib/pagy/toolbox/paginators/calendar.rb +30 -0
  81. data/lib/pagy/toolbox/paginators/countless.rb +25 -0
  82. data/lib/pagy/toolbox/paginators/elasticsearch_rails.rb +32 -0
  83. data/lib/pagy/toolbox/paginators/keynav_js.rb +29 -0
  84. data/lib/pagy/toolbox/paginators/keyset.rb +18 -0
  85. data/lib/pagy/toolbox/paginators/meilisearch.rb +32 -0
  86. data/lib/pagy/toolbox/paginators/method.rb +26 -0
  87. data/lib/pagy/toolbox/paginators/offset.rb +33 -0
  88. data/lib/pagy/toolbox/paginators/searchkick.rb +32 -0
  89. data/lib/pagy.rb +59 -97
  90. data/locales/ar.yml +9 -6
  91. data/locales/be.yml +9 -6
  92. data/locales/bg.yml +9 -6
  93. data/locales/bs.yml +9 -6
  94. data/locales/ca.yml +9 -6
  95. data/locales/ckb.yml +8 -6
  96. data/locales/cs.yml +9 -6
  97. data/locales/da.yml +9 -6
  98. data/locales/de.yml +9 -6
  99. data/locales/dz.yml +9 -6
  100. data/locales/en.yml +9 -6
  101. data/locales/es.yml +9 -6
  102. data/locales/fr.yml +9 -6
  103. data/locales/hr.yml +9 -6
  104. data/locales/id.yml +9 -6
  105. data/locales/it.yml +9 -6
  106. data/locales/ja.yml +9 -6
  107. data/locales/km.yml +9 -6
  108. data/locales/ko.yml +9 -6
  109. data/locales/nb.yml +9 -6
  110. data/locales/nl.yml +9 -6
  111. data/locales/nn.yml +9 -6
  112. data/locales/pl.yml +9 -6
  113. data/locales/pt-BR.yml +10 -7
  114. data/locales/pt.yml +10 -7
  115. data/locales/ru.yml +9 -6
  116. data/locales/sr.yml +9 -6
  117. data/locales/sv-SE.yml +9 -6
  118. data/locales/sv.yml +9 -6
  119. data/locales/sw.yml +12 -9
  120. data/locales/ta.yml +12 -9
  121. data/locales/tr.yml +9 -6
  122. data/locales/uk.yml +9 -6
  123. data/locales/vi.yml +9 -6
  124. data/locales/zh-CN.yml +9 -6
  125. data/locales/zh-HK.yml +9 -6
  126. data/locales/zh-TW.yml +9 -6
  127. data/stylesheets/pagy-tailwind.css +64 -0
  128. data/stylesheets/pagy.css +63 -27
  129. metadata +112 -51
  130. data/javascripts/pagy.min.js.map +0 -10
  131. data/lib/pagy/backend.rb +0 -44
  132. data/lib/pagy/calendar/unit.rb +0 -103
  133. data/lib/pagy/calendar.rb +0 -84
  134. data/lib/pagy/console.rb +0 -23
  135. data/lib/pagy/countless.rb +0 -38
  136. data/lib/pagy/exceptions.rb +0 -25
  137. data/lib/pagy/extras/arel.rb +0 -28
  138. data/lib/pagy/extras/array.rb +0 -19
  139. data/lib/pagy/extras/bootstrap.rb +0 -97
  140. data/lib/pagy/extras/bulma.rb +0 -93
  141. data/lib/pagy/extras/calendar.rb +0 -79
  142. data/lib/pagy/extras/countless.rb +0 -32
  143. data/lib/pagy/extras/elasticsearch_rails.rb +0 -71
  144. data/lib/pagy/extras/gearbox.rb +0 -55
  145. data/lib/pagy/extras/headers.rb +0 -54
  146. data/lib/pagy/extras/i18n.rb +0 -26
  147. data/lib/pagy/extras/js_tools.rb +0 -70
  148. data/lib/pagy/extras/jsonapi.rb +0 -88
  149. data/lib/pagy/extras/keyset.rb +0 -30
  150. data/lib/pagy/extras/limit.rb +0 -63
  151. data/lib/pagy/extras/meilisearch.rb +0 -57
  152. data/lib/pagy/extras/metadata.rb +0 -42
  153. data/lib/pagy/extras/overflow.rb +0 -81
  154. data/lib/pagy/extras/pagy.rb +0 -82
  155. data/lib/pagy/extras/searchkick.rb +0 -59
  156. data/lib/pagy/extras/size.rb +0 -40
  157. data/lib/pagy/extras/standalone.rb +0 -60
  158. data/lib/pagy/extras/trim.rb +0 -29
  159. data/lib/pagy/frontend.rb +0 -99
  160. data/lib/pagy/i18n.rb +0 -166
  161. data/lib/pagy/keyset/active_record.rb +0 -44
  162. data/lib/pagy/keyset/sequel.rb +0 -57
  163. data/lib/pagy/keyset.rb +0 -118
  164. data/lib/pagy/shared_methods.rb +0 -26
  165. data/lib/pagy/url_helpers.rb +0 -26
  166. data/stylesheets/pagy.scss +0 -48
  167. data/stylesheets/pagy.tailwind.css +0 -21
data/apps/keynav.ru ADDED
@@ -0,0 +1,258 @@
1
+ # frozen_string_literal: true
2
+
3
+ # DESCRIPTION
4
+ # Showcase the Keynav pagination (ActiveRecord example)
5
+ #
6
+ # DOC
7
+ # https://ddnexus.github.io/pagy/playground/#keyset-apps
8
+ #
9
+ # BIN HELP
10
+ # pagy -h
11
+ #
12
+ # DEV USAGE
13
+ # pagy clone keynav
14
+ # pagy ./keynav.ru
15
+ #
16
+ # URL
17
+ # http://127.0.0.1:8000
18
+
19
+ VERSION = '43.0.0.rc1'
20
+
21
+ if VERSION != Pagy::VERSION
22
+ Warning.warn("\n>>> WARNING! '#{File.basename(__FILE__)}-#{VERSION}' running with 'pagy-#{Pagy::VERSION}'! <<< \n\n")
23
+ end
24
+
25
+ # Bundle
26
+ require 'bundler/inline'
27
+ gemfile(!Pagy::ROOT.join('pagy.gemspec').exist?) do
28
+ source 'https://rubygems.org'
29
+ gem 'activerecord'
30
+ gem 'puma'
31
+ gem 'sinatra'
32
+ gem 'sqlite3'
33
+ end
34
+
35
+ # Sinatra setup
36
+ require 'sinatra/base'
37
+ # Sinatra application
38
+ class PagyKeynav < Sinatra::Base
39
+ include Pagy::Method
40
+
41
+ get('/javascripts/:file') do
42
+ format = params[:file].split('.').last
43
+ if format == 'js'
44
+ content_type 'application/javascript'
45
+ elsif format == 'map'
46
+ content_type 'application/json'
47
+ end
48
+ send_file Pagy::ROOT.join('javascripts', params[:file])
49
+ end
50
+
51
+ # Root route/action
52
+ get '/' do
53
+ Time.zone = 'UTC'
54
+
55
+ @order = { animal: :asc, name: :asc, birthdate: :desc, id: :asc }
56
+ @pagy, @pets = pagy(:keynav_js, Pet.order(@order), limit: 4, client_max_limit: 100)
57
+ @ids = @pets.pluck(:id)
58
+ erb :main
59
+ end
60
+
61
+ helpers do
62
+ def order_symbol(dir)
63
+ { asc: '&#x2197;', desc: '&#x2198;' }[dir]
64
+ end
65
+ end
66
+
67
+ # Views
68
+ template :layout do
69
+ <<~ERB
70
+ <!DOCTYPE html>
71
+ <html lang="en">
72
+ <html>
73
+ <head>
74
+ <title>Pagy Keynav App</title>
75
+ <script src="javascripts/pagy.js"></script>
76
+ <script>
77
+ window.addEventListener("load", Pagy.init);
78
+ </script>
79
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
80
+ <style type="text/css">
81
+ @media screen { html, body {
82
+ font-size: 1rem;
83
+ line-height: 1.2s;
84
+ padding: 0;
85
+ margin: 0;
86
+ } }
87
+ body {
88
+ background: white !important;
89
+ margin: 0 !important;
90
+ font-family: sans-serif !important;
91
+ }
92
+ .main-content {
93
+ padding: 1rem 1.5rem 2rem !important;
94
+ }
95
+ .pagy {
96
+ padding: .5em;
97
+ margin: .3em 0;
98
+ width: fit-content;
99
+ box-shadow: 5px 5px 10px 0px rgba(0,0,0,0.2);
100
+ }
101
+
102
+
103
+ <%= Pagy::ROOT.join('stylesheets/pagy.css').read %>
104
+ </style>
105
+ </head>
106
+ <body>
107
+ <%= yield %>
108
+ </body>
109
+ </html>
110
+ ERB
111
+ end
112
+
113
+ template :main do
114
+ <<~ERB
115
+ <div class="main-content">
116
+ <h1>Pagy Keynav App</h1>
117
+ <p>Self-contained, standalone app usable to easily reproduce any Keynav related pagy issue
118
+ with ActiveRecord sets.</p>
119
+
120
+ <p>Notice that Keynav works also with Sequel sets.</p>
121
+
122
+ <h2>Versions</h2>
123
+ <ul>
124
+ <li>Ruby: <%= RUBY_VERSION %></li>
125
+ <li>Rack: <%= Rack::RELEASE %></li>
126
+ <li>Sinatra: <%= Sinatra::VERSION %></li>
127
+ <li>Pagy: <%= Pagy::VERSION %></li>
128
+ </ul>
129
+
130
+ <h3>Collection</h3>
131
+ <p id="records">@ids: <%= @ids.join(',') %></p>
132
+ <div class="collection">
133
+ <table border="1" style="border-collapse: collapse; border-spacing: 0; padding: 0.2rem;">
134
+ <tr>
135
+ <th scope="col">animal <%= order_symbol(@order[:animal]) %></th>
136
+ <th scope="col">name <%= order_symbol(@order[:name]) %></th>
137
+ <th scope="col">birthdate <%= order_symbol(@order[:birthdate]) %></th>
138
+ <th scope="col">id <%= order_symbol(@order[:id]) %></th>
139
+ </tr>
140
+ <% @pets.each do |pet| %>
141
+ <tr>
142
+ <td><%= pet.animal %></td>
143
+ <td><%= pet.name %></td>
144
+ <td><%= pet.birthdate %></td>
145
+ <td><%= pet.id %></td>
146
+ </tr>
147
+ <% end %>
148
+ </table>
149
+ </div>
150
+
151
+ <h4>@pagy.series_nav</h4>
152
+ <%= @pagy.series_nav(id: 'series-nav',
153
+ aria_label: 'Pages (nav)') %>
154
+
155
+ <h4>@pagy.series_nav_js (responsive)</h4>
156
+ <%= @pagy.series_nav_js(id: 'series-nav-js-responsive',
157
+ aria_label: 'Pages (nav_js_responsive)',
158
+ steps: { 0 => 5, 500 => 7, 750 => 9, 1000 => 11 }) %>
159
+ <h4>@pagy.input_nav_js</h4>
160
+ <%= @pagy.input_nav_js(id: 'input-nav-js',
161
+ aria_label: 'Pages (input_nav_js)') %>
162
+
163
+ <h4>@pagy.info_tag</h4>
164
+ <%= @pagy.info_tag(id: 'pagy-info') %>
165
+ </div>
166
+ ERB
167
+ end
168
+ end
169
+
170
+ # ActiveRecord setup
171
+ require 'active_record'
172
+
173
+ # Match the microsecods with the strings stored into the time columns of SQLite
174
+ # ActiveSupport::JSON::Encoding.time_precision = 6
175
+
176
+ # Log
177
+ output = ENV['APP_ENV'].equal?('showcase') ? IO::NULL : $stdout
178
+ ActiveRecord::Base.logger = Logger.new(output)
179
+ # SQLite DB files
180
+ dir = ENV['APP_ENV'].equal?('development') ? '.' : Dir.pwd # app dir in dev or pwd otherwise
181
+ abort "ERROR: Cannot create DB files: the directory #{dir.inspect} is not writable." \
182
+ unless File.writable?(dir)
183
+ # Connection
184
+ ActiveRecord::Base.establish_connection(adapter: 'sqlite3', database: "#{dir}/tmp/pagy-keyset-ar.sqlite3")
185
+ # Schema
186
+ ActiveRecord::Schema.define do
187
+ create_table :pets, force: true do |t|
188
+ t.string :animal
189
+ t.string :name
190
+ t.date :birthdate
191
+ end
192
+ end
193
+
194
+ # Models
195
+ class Pet < ActiveRecord::Base; end
196
+
197
+ data = <<~DATA
198
+ Luna | dog | 2018-03-10
199
+ Coco | cat | 2019-05-15
200
+ Dodo | dog | 2020-06-25
201
+ Wiki | bird | 2018-03-12
202
+ Baby | rabbit | 2020-01-13
203
+ Neki | horse | 2021-07-20
204
+ Tino | donkey | 2019-06-18
205
+ Plot | cat | 2022-09-21
206
+ Riki | cat | 2018-09-14
207
+ Susi | horse | 2018-10-26
208
+ Coco | pig | 2020-08-29
209
+ Momo | bird | 2023-08-25
210
+ Lili | cat | 2021-07-22
211
+ Beli | pig | 2020-07-26
212
+ Rocky | bird | 2022-08-19
213
+ Vyvy | dog | 2018-05-16
214
+ Susi | horse | 2024-01-25
215
+ Ella | cat | 2020-02-20
216
+ Rocky | dog | 2019-09-19
217
+ Juni | rabbit | 2020-08-24
218
+ Coco | bird | 2021-03-17
219
+ Susi | dog | 2021-07-28
220
+ Luna | horse | 2023-05-14
221
+ Gigi | pig | 2022-05-19
222
+ Coco | cat | 2020-02-20
223
+ Nino | donkey | 2019-06-17
224
+ Luna | cat | 2022-02-09
225
+ Popi | dog | 2020-09-26
226
+ Lili | pig | 2022-06-18
227
+ Mina | horse | 2021-04-21
228
+ Susi | rabbit | 2023-05-18
229
+ Toni | donkey | 2018-06-22
230
+ Rocky | horse | 2019-09-28
231
+ Lili | cat | 2019-03-18
232
+ Roby | cat | 2022-06-19
233
+ Anto | horse | 2022-08-18
234
+ Susi | pig | 2021-04-21
235
+ Boly | bird | 2020-03-29
236
+ Sky | cat | 2023-07-19
237
+ Lili | dog | 2020-01-28
238
+ Fami | snake | 2023-04-27
239
+ Lopi | pig | 2019-06-19
240
+ Rocky | snake | 2022-03-13
241
+ Denis | dog | 2022-06-19
242
+ Maca | cat | 2022-06-19
243
+ Luna | dog | 2022-08-15
244
+ Jeme | horse | 2019-08-08
245
+ Sary | bird | 2023-04-29
246
+ Rocky | bird | 2023-05-14
247
+ Coco | dog | 2023-05-27
248
+ DATA
249
+
250
+ # DB seed
251
+ pets = []
252
+ data.each_line(chomp: true) do |pet|
253
+ name, animal, birthdate = pet.split('|').map(&:strip)
254
+ pets << { name:, animal:, birthdate: }
255
+ end
256
+ Pet.insert_all(pets)
257
+
258
+ run PagyKeynav
@@ -1,28 +1,30 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # DESCRIPTION
4
- # Showcase the keyset ActiveRecord pagination
4
+ # Showcase the Keyset pagination (ActiveRecord example)
5
5
  #
6
6
  # DOC
7
- # https://ddnexus.github.io/pagy/playground/#5-keyset-apps
7
+ # https://ddnexus.github.io/pagy/playground/#keyset-apps
8
8
  #
9
9
  # BIN HELP
10
- # bundle exec pagy -h
10
+ # pagy -h
11
11
  #
12
12
  # DEV USAGE
13
- # bundle exec pagy clone keyset_ar
14
- # bundle exec pagy ./keyset_ar.ru
13
+ # pagy clone keyset
14
+ # pagy ./keyset.ru
15
15
  #
16
16
  # URL
17
- # http://0.0.0.0:8000
17
+ # http://127.0.0.1:8000
18
18
 
19
- VERSION = '9.3.5'
19
+ VERSION = '43.0.0.rc1'
20
+
21
+ if VERSION != Pagy::VERSION
22
+ Warning.warn("\n>>> WARNING! '#{File.basename(__FILE__)}-#{VERSION}' running with 'pagy-#{Pagy::VERSION}'! <<< \n\n")
23
+ end
20
24
 
21
25
  # Bundle
22
26
  require 'bundler/inline'
23
- require 'bundler'
24
- Bundler.configure
25
- gemfile(ENV['PAGY_INSTALL_BUNDLE'] == 'true') do
27
+ gemfile(!Pagy::ROOT.join('pagy.gemspec').exist?) do
26
28
  source 'https://rubygems.org'
27
29
  gem 'activerecord'
28
30
  gem 'puma'
@@ -30,30 +32,23 @@ gemfile(ENV['PAGY_INSTALL_BUNDLE'] == 'true') do
30
32
  gem 'sqlite3'
31
33
  end
32
34
 
33
- # Pagy initializer
34
- require 'pagy/extras/limit'
35
- require 'pagy/extras/keyset'
36
- require 'pagy/extras/pagy'
37
- Pagy::DEFAULT[:limit] = 10
38
- Pagy::DEFAULT.freeze
39
-
40
35
  # Sinatra setup
41
36
  require 'sinatra/base'
42
37
  # Sinatra application
43
38
  class PagyKeyset < Sinatra::Base
44
- include Pagy::Backend
39
+ include Pagy::Method
40
+
45
41
  # Root route/action
46
42
  get '/' do
47
43
  Time.zone = 'UTC'
48
44
 
49
45
  @order = { animal: :asc, name: :asc, birthdate: :desc, id: :asc }
50
- @pagy, @pets = pagy_keyset(Pet.order(@order))
46
+ @pagy, @pets = pagy(:keyset, Pet.order(@order), limit: 10, client_max_limit: 100)
47
+ # response.headers.merge!(@pagy.headers_hash)
51
48
  erb :main
52
49
  end
53
50
 
54
51
  helpers do
55
- include Pagy::Frontend
56
-
57
52
  def order_symbol(dir)
58
53
  { asc: '&#x2197;', desc: '&#x2198;' }[dir]
59
54
  end
@@ -80,11 +75,11 @@ class PagyKeyset < Sinatra::Base
80
75
  margin: 0 !important;
81
76
  font-family: sans-serif !important;
82
77
  }
83
- .content {
78
+ .main-content {
84
79
  padding: 1rem 1.5rem 2rem !important;
85
80
  }
86
81
 
87
- <%= Pagy.root.join('stylesheets', 'pagy.css').read %>
82
+ <%= Pagy::ROOT.join('stylesheets/pagy.css').read %>
88
83
  </style>
89
84
  </head>
90
85
  <body>
@@ -96,10 +91,10 @@ class PagyKeyset < Sinatra::Base
96
91
 
97
92
  template :main do
98
93
  <<~ERB
99
- <div class="content">
94
+ <div class="main-content">
100
95
  <h1>Pagy Keyset App</h1>
101
- <p>Self-contained, standalone app usable to easily reproduce any keyset related pagy issue with ActiveRecord sets.</p>
102
- <p>Please, report the following versions in any new issue.</p>
96
+ <p>Self-contained, standalone app usable to easily reproduce any Keyset related pagy issue with ActiveRecord sets.</p>
97
+
103
98
  <h2>Versions</h2>
104
99
  <ul>
105
100
  <li>Ruby: <%= RUBY_VERSION %></li>
@@ -110,12 +105,12 @@ class PagyKeyset < Sinatra::Base
110
105
 
111
106
  <h3>Collection</h3>
112
107
  <div id="records" class="collection">
113
- <table border="1" cellspacing="0" cellpadding="3">
108
+ <table border="1" style="border-collapse: collapse; border-spacing: 0; padding: 0.2rem;">
114
109
  <tr>
115
- <th>animal <%= order_symbol(@order[:animal]) %></th>
116
- <th>name <%= order_symbol(@order[:name]) %></th>
117
- <th>birthdate <%= order_symbol(@order[:birthdate]) %></th>
118
- <th>id <%= order_symbol(@order[:id]) %></th>
110
+ <th scope="col">animal <%= order_symbol(@order[:animal]) %></th>
111
+ <th scope="col">name <%= order_symbol(@order[:name]) %></th>
112
+ <th scope="col">birthdate <%= order_symbol(@order[:birthdate]) %></th>
113
+ <th scope="col">id <%= order_symbol(@order[:id]) %></th>
119
114
  </tr>
120
115
  <% @pets.each do |pet| %>
121
116
  <tr>
@@ -129,7 +124,7 @@ class PagyKeyset < Sinatra::Base
129
124
  </div>
130
125
  <p>
131
126
  <nav class="pagy" id="next" aria-label="Pagy next">
132
- <%= pagy_next_a(@pagy, text: 'Next page &gt;') %>
127
+ <%= @pagy.next_tag(text: 'Next page &gt;') %>
133
128
  </nav>
134
129
  </div>
135
130
  ERB
@@ -1,28 +1,30 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # DESCRIPTION
4
- # Showcase the keyset ActiveRecord pagination
4
+ # Showcase the Keyset pagination (Sequel example)
5
5
  #
6
6
  # DOC
7
- # https://ddnexus.github.io/pagy/playground/#5-keyset-apps
7
+ # https://ddnexus.github.io/pagy/playground/#keyset-apps
8
8
  #
9
9
  # BIN HELP
10
- # bundle exec pagy -h
10
+ # pagy -h
11
11
  #
12
12
  # DEV USAGE
13
- # bundle exec pagy clone keyset_ar
14
- # bundle exec pagy ./keyset_ar.ru
13
+ # pagy clone keyset_sequel
14
+ # pagy ./keyset_sequel.ru
15
15
  #
16
16
  # URL
17
- # http://0.0.0.0:8000
17
+ # http://127.0.0.1:8000
18
18
 
19
- VERSION = '9.3.5'
19
+ VERSION = '43.0.0.rc1'
20
+
21
+ if VERSION != Pagy::VERSION
22
+ Warning.warn("\n>>> WARNING! '#{File.basename(__FILE__)}-#{VERSION}' running with 'pagy-#{Pagy::VERSION}'! <<< \n\n")
23
+ end
20
24
 
21
25
  # Bundle
22
26
  require 'bundler/inline'
23
- require 'bundler'
24
- Bundler.configure
25
- gemfile(ENV['PAGY_INSTALL_BUNDLE'] == 'true') do
27
+ gemfile(!Pagy::ROOT.join('pagy.gemspec').exist?) do
26
28
  source 'https://rubygems.org'
27
29
  gem 'puma'
28
30
  gem 'sequel'
@@ -30,29 +32,22 @@ gemfile(ENV['PAGY_INSTALL_BUNDLE'] == 'true') do
30
32
  gem 'sqlite3'
31
33
  end
32
34
 
33
- # Pagy initializer
34
- require 'pagy/extras/limit'
35
- require 'pagy/extras/keyset'
36
- require 'pagy/extras/pagy'
37
- Pagy::DEFAULT[:limit] = 10
38
- Pagy::DEFAULT.freeze
39
-
40
35
  # Sinatra setup
41
36
  require 'sinatra/base'
42
37
  require 'logger'
43
38
  # Sinatra application
44
- class PagyKeyset < Sinatra::Base
45
- include Pagy::Backend
39
+ class PagyKeysetSequel < Sinatra::Base
40
+ include Pagy::Method
41
+
46
42
  # Root route/action
47
43
  get '/' do
48
44
  @order = { animal: :asc, name: :asc, birthdate: :desc, id: :asc }
49
- @pagy, @pets = pagy_keyset(Pet.order(:animal, :name, Sequel.desc(:birthdate), :id))
45
+ @pagy, @pets = pagy(:keyset, Pet.order(:animal, :name, Sequel.desc(:birthdate), :id),
46
+ limit: 10, client_max_limit: 100)
50
47
  erb :main
51
48
  end
52
49
 
53
50
  helpers do
54
- include Pagy::Frontend
55
-
56
51
  def order_symbol(dir)
57
52
  { asc: '&#x2197;', desc: '&#x2198;' }[dir]
58
53
  end
@@ -79,11 +74,11 @@ class PagyKeyset < Sinatra::Base
79
74
  margin: 0 !important;
80
75
  font-family: sans-serif !important;
81
76
  }
82
- .content {
77
+ .main-content {
83
78
  padding: 1rem 1.5rem 2rem !important;
84
79
  }
85
80
 
86
- <%= Pagy.root.join('stylesheets', 'pagy.css').read %>
81
+ <%= Pagy::ROOT.join('stylesheets/pagy.css').read %>
87
82
  </style>
88
83
  </head>
89
84
  <body>
@@ -95,10 +90,10 @@ class PagyKeyset < Sinatra::Base
95
90
 
96
91
  template :main do
97
92
  <<~ERB
98
- <div class="content">
93
+ <div class="main-content">
99
94
  <h1>Pagy Keyset App</h1>
100
- <p>Self-contained, standalone app usable to easily reproduce any keyset related pagy issue with ActiveRecord sets.</p>
101
- <p>Please, report the following versions in any new issue.</p>
95
+ <p>Self-contained, standalone app usable to easily reproduce any Keyset related pagy issue with Sequel sets.</p>
96
+
102
97
  <h2>Versions</h2>
103
98
  <ul>
104
99
  <li>Ruby: <%= RUBY_VERSION %></li>
@@ -128,7 +123,7 @@ class PagyKeyset < Sinatra::Base
128
123
  </div>
129
124
  <p>
130
125
  <nav class="pagy" id="next" aria-label="Pagy next">
131
- <%= pagy_next_a(@pagy, text: 'Next page &gt;') %>
126
+ <%= @pagy.next_tag(text: 'Next page &gt;') %>
132
127
  </nav>
133
128
  </div>
134
129
  ERB
@@ -216,4 +211,4 @@ data.each_line(chomp: true) do |pet|
216
211
  dataset.insert(name:, animal:, birthdate:)
217
212
  end
218
213
 
219
- run PagyKeyset
214
+ run PagyKeysetSequel