pagy 9.4.0 → 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 (168) 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} +26 -32
  7. data/apps/{keyset_s.ru → keyset_sequel.ru} +23 -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 +15 -8
  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 -52
  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 -167
  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/locales/sk.yml +0 -23
  167. data/stylesheets/pagy.scss +0 -48
  168. 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.4.0'
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,31 +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
45
40
 
46
41
  # Root route/action
47
42
  get '/' do
48
43
  Time.zone = 'UTC'
49
44
 
50
45
  @order = { animal: :asc, name: :asc, birthdate: :desc, id: :asc }
51
- @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)
52
48
  erb :main
53
49
  end
54
50
 
55
51
  helpers do
56
- include Pagy::Frontend
57
-
58
52
  def order_symbol(dir)
59
53
  { asc: '&#x2197;', desc: '&#x2198;' }[dir]
60
54
  end
@@ -81,11 +75,11 @@ class PagyKeyset < Sinatra::Base
81
75
  margin: 0 !important;
82
76
  font-family: sans-serif !important;
83
77
  }
84
- .content {
78
+ .main-content {
85
79
  padding: 1rem 1.5rem 2rem !important;
86
80
  }
87
81
 
88
- <%= Pagy.root.join('stylesheets', 'pagy.css').read %>
82
+ <%= Pagy::ROOT.join('stylesheets/pagy.css').read %>
89
83
  </style>
90
84
  </head>
91
85
  <body>
@@ -97,10 +91,10 @@ class PagyKeyset < Sinatra::Base
97
91
 
98
92
  template :main do
99
93
  <<~ERB
100
- <div class="content">
94
+ <div class="main-content">
101
95
  <h1>Pagy Keyset App</h1>
102
- <p>Self-contained, standalone app usable to easily reproduce any keyset related pagy issue with ActiveRecord sets.</p>
103
- <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
+
104
98
  <h2>Versions</h2>
105
99
  <ul>
106
100
  <li>Ruby: <%= RUBY_VERSION %></li>
@@ -111,12 +105,12 @@ class PagyKeyset < Sinatra::Base
111
105
 
112
106
  <h3>Collection</h3>
113
107
  <div id="records" class="collection">
114
- <table border="1" cellspacing="0" cellpadding="3">
108
+ <table border="1" style="border-collapse: collapse; border-spacing: 0; padding: 0.2rem;">
115
109
  <tr>
116
- <th>animal <%= order_symbol(@order[:animal]) %></th>
117
- <th>name <%= order_symbol(@order[:name]) %></th>
118
- <th>birthdate <%= order_symbol(@order[:birthdate]) %></th>
119
- <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>
120
114
  </tr>
121
115
  <% @pets.each do |pet| %>
122
116
  <tr>
@@ -130,7 +124,7 @@ class PagyKeyset < Sinatra::Base
130
124
  </div>
131
125
  <p>
132
126
  <nav class="pagy" id="next" aria-label="Pagy next">
133
- <%= pagy_next_a(@pagy, text: 'Next page &gt;') %>
127
+ <%= @pagy.next_tag(text: 'Next page &gt;') %>
134
128
  </nav>
135
129
  </div>
136
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.4.0'
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,30 +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
46
41
 
47
42
  # Root route/action
48
43
  get '/' do
49
44
  @order = { animal: :asc, name: :asc, birthdate: :desc, id: :asc }
50
- @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)
51
47
  erb :main
52
48
  end
53
49
 
54
50
  helpers do
55
- include Pagy::Frontend
56
-
57
51
  def order_symbol(dir)
58
52
  { asc: '&#x2197;', desc: '&#x2198;' }[dir]
59
53
  end
@@ -80,11 +74,11 @@ class PagyKeyset < Sinatra::Base
80
74
  margin: 0 !important;
81
75
  font-family: sans-serif !important;
82
76
  }
83
- .content {
77
+ .main-content {
84
78
  padding: 1rem 1.5rem 2rem !important;
85
79
  }
86
80
 
87
- <%= Pagy.root.join('stylesheets', 'pagy.css').read %>
81
+ <%= Pagy::ROOT.join('stylesheets/pagy.css').read %>
88
82
  </style>
89
83
  </head>
90
84
  <body>
@@ -96,10 +90,10 @@ class PagyKeyset < Sinatra::Base
96
90
 
97
91
  template :main do
98
92
  <<~ERB
99
- <div class="content">
93
+ <div class="main-content">
100
94
  <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>
95
+ <p>Self-contained, standalone app usable to easily reproduce any Keyset related pagy issue with Sequel sets.</p>
96
+
103
97
  <h2>Versions</h2>
104
98
  <ul>
105
99
  <li>Ruby: <%= RUBY_VERSION %></li>
@@ -129,7 +123,7 @@ class PagyKeyset < Sinatra::Base
129
123
  </div>
130
124
  <p>
131
125
  <nav class="pagy" id="next" aria-label="Pagy next">
132
- <%= pagy_next_a(@pagy, text: 'Next page &gt;') %>
126
+ <%= @pagy.next_tag(text: 'Next page &gt;') %>
133
127
  </nav>
134
128
  </div>
135
129
  ERB
@@ -217,4 +211,4 @@ data.each_line(chomp: true) do |pet|
217
211
  dataset.insert(name:, animal:, birthdate:)
218
212
  end
219
213
 
220
- run PagyKeyset
214
+ run PagyKeysetSequel