pagy 8.6.3 → 9.3.4
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 +4 -4
- data/LICENSE.txt +1 -1
- data/apps/calendar.ru +119 -127
- data/apps/demo.ru +274 -260
- data/apps/index.rb +7 -0
- data/apps/keyset_ar.ru +227 -0
- data/apps/keyset_s.ru +219 -0
- data/apps/rails.ru +25 -20
- data/apps/repro.ru +108 -103
- data/bin/pagy +18 -20
- data/config/pagy.rb +19 -15
- data/javascripts/pagy.min.js +2 -2
- data/javascripts/pagy.min.js.map +3 -3
- data/javascripts/pagy.mjs +2 -2
- data/lib/pagy/b64.rb +33 -0
- data/lib/pagy/backend.rb +20 -20
- data/lib/pagy/calendar/day.rb +2 -2
- data/lib/pagy/calendar/month.rb +2 -2
- data/lib/pagy/calendar/quarter.rb +2 -2
- data/lib/pagy/calendar/unit.rb +7 -10
- data/lib/pagy/calendar/week.rb +2 -2
- data/lib/pagy/calendar/year.rb +2 -2
- data/lib/pagy/calendar.rb +15 -13
- data/lib/pagy/countless.rb +10 -14
- data/lib/pagy/extras/arel.rb +3 -11
- data/lib/pagy/extras/array.rb +5 -10
- data/lib/pagy/extras/bootstrap.rb +5 -5
- data/lib/pagy/extras/bulma.rb +10 -7
- data/lib/pagy/extras/calendar.rb +13 -17
- data/lib/pagy/extras/countless.rb +8 -13
- data/lib/pagy/extras/elasticsearch_rails.rb +16 -25
- data/lib/pagy/extras/gearbox.rb +18 -18
- data/lib/pagy/extras/headers.rb +25 -24
- data/lib/pagy/extras/i18n.rb +1 -1
- data/lib/pagy/extras/js_tools.rb +6 -6
- data/lib/pagy/extras/jsonapi.rb +30 -21
- data/lib/pagy/extras/keyset.rb +30 -0
- data/lib/pagy/extras/limit.rb +63 -0
- data/lib/pagy/extras/meilisearch.rb +9 -17
- data/lib/pagy/extras/metadata.rb +3 -3
- data/lib/pagy/extras/overflow.rb +9 -9
- data/lib/pagy/extras/pagy.rb +16 -16
- data/lib/pagy/extras/searchkick.rb +9 -17
- data/lib/pagy/extras/size.rb +1 -1
- data/lib/pagy/extras/standalone.rb +6 -6
- data/lib/pagy/extras/trim.rb +3 -3
- data/lib/pagy/frontend.rb +32 -33
- data/lib/pagy/i18n.rb +3 -2
- data/lib/pagy/keyset/active_record.rb +38 -0
- data/lib/pagy/keyset/sequel.rb +51 -0
- data/lib/pagy/keyset.rb +118 -0
- data/lib/pagy/shared_methods.rb +26 -0
- data/lib/pagy/url_helpers.rb +5 -5
- data/lib/pagy.rb +53 -67
- data/locales/ar.yml +1 -1
- data/locales/be.yml +1 -1
- data/locales/bg.yml +1 -1
- data/locales/bs.yml +1 -1
- data/locales/ca.yml +1 -1
- data/locales/ckb.yml +1 -1
- data/locales/cs.yml +1 -1
- data/locales/da.yml +1 -1
- data/locales/de.yml +1 -1
- data/locales/dz.yml +17 -0
- data/locales/en.yml +1 -1
- data/locales/es.yml +1 -1
- data/locales/fr.yml +1 -1
- data/locales/hr.yml +1 -1
- data/locales/id.yml +1 -1
- data/locales/it.yml +1 -1
- data/locales/ja.yml +1 -1
- data/locales/km.yml +1 -1
- data/locales/ko.yml +1 -1
- data/locales/nb.yml +1 -1
- data/locales/nl.yml +1 -1
- data/locales/nn.yml +1 -1
- data/locales/pl.yml +1 -1
- data/locales/pt-BR.yml +1 -1
- data/locales/pt.yml +1 -1
- data/locales/ru.yml +1 -1
- data/locales/sr.yml +1 -1
- data/locales/sv-SE.yml +1 -1
- data/locales/sv.yml +1 -1
- data/locales/sw.yml +3 -1
- data/locales/ta.yml +3 -1
- data/locales/tr.yml +1 -1
- data/locales/uk.yml +1 -1
- data/locales/vi.yml +1 -1
- data/locales/zh-CN.yml +7 -9
- data/locales/zh-HK.yml +7 -9
- data/locales/zh-TW.yml +7 -9
- metadata +14 -27
- data/apps/tmp/calendar.sqlite3 +0 -0
- data/apps/tmp/calendar.sqlite3-shm +0 -0
- data/apps/tmp/calendar.sqlite3-wal +0 -0
- data/apps/tmp/local_secret.txt +0 -1
- data/apps/tmp/pagy-keyset.sqlite3 +0 -0
- data/apps/tmp/pagy-keyset.sqlite3-shm +0 -0
- data/apps/tmp/pagy-keyset.sqlite3-wal +0 -0
- data/javascripts/pagy-module.js +0 -100
- data/javascripts/pagy.js +0 -4
- data/lib/pagy/extras/foundation.rb +0 -95
- data/lib/pagy/extras/items.rb +0 -64
- data/lib/pagy/extras/materialize.rb +0 -100
- data/lib/pagy/extras/semantic.rb +0 -94
- data/lib/pagy/extras/uikit.rb +0 -98
data/apps/keyset_ar.ru
ADDED
@@ -0,0 +1,227 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# DESCRIPTION
|
4
|
+
# Showcase the keyset ActiveRecord pagination
|
5
|
+
#
|
6
|
+
# DOC
|
7
|
+
# https://ddnexus.github.io/pagy/playground/#5-keyset-apps
|
8
|
+
#
|
9
|
+
# BIN HELP
|
10
|
+
# bundle exec pagy -h
|
11
|
+
#
|
12
|
+
# DEV USAGE
|
13
|
+
# bundle exec pagy clone keyset_ar
|
14
|
+
# bundle exec pagy ./keyset_ar.ru
|
15
|
+
#
|
16
|
+
# URL
|
17
|
+
# http://0.0.0.0:8000
|
18
|
+
|
19
|
+
VERSION = '9.3.4'
|
20
|
+
|
21
|
+
# Bundle
|
22
|
+
require 'bundler/inline'
|
23
|
+
require 'bundler'
|
24
|
+
Bundler.configure
|
25
|
+
gemfile(ENV['PAGY_INSTALL_BUNDLE'] == 'true') do
|
26
|
+
source 'https://rubygems.org'
|
27
|
+
gem 'activerecord'
|
28
|
+
gem 'puma'
|
29
|
+
gem 'sinatra'
|
30
|
+
gem 'sqlite3'
|
31
|
+
end
|
32
|
+
|
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
|
+
# Sinatra setup
|
41
|
+
require 'sinatra/base'
|
42
|
+
# Sinatra application
|
43
|
+
class PagyKeyset < Sinatra::Base
|
44
|
+
include Pagy::Backend
|
45
|
+
# Root route/action
|
46
|
+
get '/' do
|
47
|
+
Time.zone = 'UTC'
|
48
|
+
|
49
|
+
@order = { animal: :asc, name: :asc, birthdate: :desc, id: :asc }
|
50
|
+
@pagy, @pets = pagy_keyset(Pet.order(@order))
|
51
|
+
erb :main
|
52
|
+
end
|
53
|
+
|
54
|
+
helpers do
|
55
|
+
include Pagy::Frontend
|
56
|
+
|
57
|
+
def order_symbol(dir)
|
58
|
+
{ asc: '↗', desc: '↘' }[dir]
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
# Views
|
63
|
+
template :layout do
|
64
|
+
<<~ERB
|
65
|
+
<!DOCTYPE html>
|
66
|
+
<html lang="en">
|
67
|
+
<html>
|
68
|
+
<head>
|
69
|
+
<title>Pagy Keyset App</title>
|
70
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
71
|
+
<style type="text/css">
|
72
|
+
@media screen { html, body {
|
73
|
+
font-size: 1rem;
|
74
|
+
line-height: 1.2s;
|
75
|
+
padding: 0;
|
76
|
+
margin: 0;
|
77
|
+
} }
|
78
|
+
body {
|
79
|
+
background: white !important;
|
80
|
+
margin: 0 !important;
|
81
|
+
font-family: sans-serif !important;
|
82
|
+
}
|
83
|
+
.content {
|
84
|
+
padding: 1rem 1.5rem 2rem !important;
|
85
|
+
}
|
86
|
+
|
87
|
+
<%= Pagy.root.join('stylesheets', 'pagy.css').read %>
|
88
|
+
</style>
|
89
|
+
</head>
|
90
|
+
<body>
|
91
|
+
<%= yield %>
|
92
|
+
</body>
|
93
|
+
</html>
|
94
|
+
ERB
|
95
|
+
end
|
96
|
+
|
97
|
+
template :main do
|
98
|
+
<<~ERB
|
99
|
+
<div class="content">
|
100
|
+
<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>
|
103
|
+
<h2>Versions</h2>
|
104
|
+
<ul>
|
105
|
+
<li>Ruby: <%= RUBY_VERSION %></li>
|
106
|
+
<li>Rack: <%= Rack::RELEASE %></li>
|
107
|
+
<li>Sinatra: <%= Sinatra::VERSION %></li>
|
108
|
+
<li>Pagy: <%= Pagy::VERSION %></li>
|
109
|
+
</ul>
|
110
|
+
|
111
|
+
<h3>Collection</h3>
|
112
|
+
<div id="records" class="collection">
|
113
|
+
<table border="1" cellspacing="0" cellpadding="3">
|
114
|
+
<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>
|
119
|
+
</tr>
|
120
|
+
<% @pets.each do |pet| %>
|
121
|
+
<tr>
|
122
|
+
<td><%= pet.animal %></td>
|
123
|
+
<td><%= pet.name %></td>
|
124
|
+
<td><%= pet.birthdate %></td>
|
125
|
+
<td><%= pet.id %></td>
|
126
|
+
</tr>
|
127
|
+
<% end %>
|
128
|
+
</table>
|
129
|
+
</div>
|
130
|
+
<p>
|
131
|
+
<nav class="pagy" id="next" aria-label="Pagy next">
|
132
|
+
<%= pagy_next_a(@pagy, text: 'Next page >') %>
|
133
|
+
</nav>
|
134
|
+
</div>
|
135
|
+
ERB
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
# ActiveRecord setup
|
140
|
+
require 'active_record'
|
141
|
+
|
142
|
+
# Match the microsecods with the strings stored into the time columns of SQLite
|
143
|
+
# ActiveSupport::JSON::Encoding.time_precision = 6
|
144
|
+
|
145
|
+
# Log
|
146
|
+
output = ENV['APP_ENV'].equal?('showcase') ? IO::NULL : $stdout
|
147
|
+
ActiveRecord::Base.logger = Logger.new(output)
|
148
|
+
# SQLite DB files
|
149
|
+
dir = ENV['APP_ENV'].equal?('development') ? '.' : Dir.pwd # app dir in dev or pwd otherwise
|
150
|
+
abort "ERROR: Cannot create DB files: the directory #{dir.inspect} is not writable." \
|
151
|
+
unless File.writable?(dir)
|
152
|
+
# Connection
|
153
|
+
ActiveRecord::Base.establish_connection(adapter: 'sqlite3', database: "#{dir}/tmp/pagy-keyset-ar.sqlite3")
|
154
|
+
# Schema
|
155
|
+
ActiveRecord::Schema.define do
|
156
|
+
create_table :pets, force: true do |t|
|
157
|
+
t.string :animal
|
158
|
+
t.string :name
|
159
|
+
t.date :birthdate
|
160
|
+
end
|
161
|
+
end
|
162
|
+
|
163
|
+
# Models
|
164
|
+
class Pet < ActiveRecord::Base; end
|
165
|
+
|
166
|
+
data = <<~DATA
|
167
|
+
Luna | dog | 2018-03-10
|
168
|
+
Coco | cat | 2019-05-15
|
169
|
+
Dodo | dog | 2020-06-25
|
170
|
+
Wiki | bird | 2018-03-12
|
171
|
+
Baby | rabbit | 2020-01-13
|
172
|
+
Neki | horse | 2021-07-20
|
173
|
+
Tino | donkey | 2019-06-18
|
174
|
+
Plot | cat | 2022-09-21
|
175
|
+
Riki | cat | 2018-09-14
|
176
|
+
Susi | horse | 2018-10-26
|
177
|
+
Coco | pig | 2020-08-29
|
178
|
+
Momo | bird | 2023-08-25
|
179
|
+
Lili | cat | 2021-07-22
|
180
|
+
Beli | pig | 2020-07-26
|
181
|
+
Rocky | bird | 2022-08-19
|
182
|
+
Vyvy | dog | 2018-05-16
|
183
|
+
Susi | horse | 2024-01-25
|
184
|
+
Ella | cat | 2020-02-20
|
185
|
+
Rocky | dog | 2019-09-19
|
186
|
+
Juni | rabbit | 2020-08-24
|
187
|
+
Coco | bird | 2021-03-17
|
188
|
+
Susi | dog | 2021-07-28
|
189
|
+
Luna | horse | 2023-05-14
|
190
|
+
Gigi | pig | 2022-05-19
|
191
|
+
Coco | cat | 2020-02-20
|
192
|
+
Nino | donkey | 2019-06-17
|
193
|
+
Luna | cat | 2022-02-09
|
194
|
+
Popi | dog | 2020-09-26
|
195
|
+
Lili | pig | 2022-06-18
|
196
|
+
Mina | horse | 2021-04-21
|
197
|
+
Susi | rabbit | 2023-05-18
|
198
|
+
Toni | donkey | 2018-06-22
|
199
|
+
Rocky | horse | 2019-09-28
|
200
|
+
Lili | cat | 2019-03-18
|
201
|
+
Roby | cat | 2022-06-19
|
202
|
+
Anto | horse | 2022-08-18
|
203
|
+
Susi | pig | 2021-04-21
|
204
|
+
Boly | bird | 2020-03-29
|
205
|
+
Sky | cat | 2023-07-19
|
206
|
+
Lili | dog | 2020-01-28
|
207
|
+
Fami | snake | 2023-04-27
|
208
|
+
Lopi | pig | 2019-06-19
|
209
|
+
Rocky | snake | 2022-03-13
|
210
|
+
Denis | dog | 2022-06-19
|
211
|
+
Maca | cat | 2022-06-19
|
212
|
+
Luna | dog | 2022-08-15
|
213
|
+
Jeme | horse | 2019-08-08
|
214
|
+
Sary | bird | 2023-04-29
|
215
|
+
Rocky | bird | 2023-05-14
|
216
|
+
Coco | dog | 2023-05-27
|
217
|
+
DATA
|
218
|
+
|
219
|
+
# DB seed
|
220
|
+
pets = []
|
221
|
+
data.each_line(chomp: true) do |pet|
|
222
|
+
name, animal, birthdate = pet.split('|').map(&:strip)
|
223
|
+
pets << { name:, animal:, birthdate: }
|
224
|
+
end
|
225
|
+
Pet.insert_all(pets)
|
226
|
+
|
227
|
+
run PagyKeyset
|
data/apps/keyset_s.ru
ADDED
@@ -0,0 +1,219 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# DESCRIPTION
|
4
|
+
# Showcase the keyset ActiveRecord pagination
|
5
|
+
#
|
6
|
+
# DOC
|
7
|
+
# https://ddnexus.github.io/pagy/playground/#5-keyset-apps
|
8
|
+
#
|
9
|
+
# BIN HELP
|
10
|
+
# bundle exec pagy -h
|
11
|
+
#
|
12
|
+
# DEV USAGE
|
13
|
+
# bundle exec pagy clone keyset_ar
|
14
|
+
# bundle exec pagy ./keyset_ar.ru
|
15
|
+
#
|
16
|
+
# URL
|
17
|
+
# http://0.0.0.0:8000
|
18
|
+
|
19
|
+
VERSION = '9.3.4'
|
20
|
+
|
21
|
+
# Bundle
|
22
|
+
require 'bundler/inline'
|
23
|
+
require 'bundler'
|
24
|
+
Bundler.configure
|
25
|
+
gemfile(ENV['PAGY_INSTALL_BUNDLE'] == 'true') do
|
26
|
+
source 'https://rubygems.org'
|
27
|
+
gem 'puma'
|
28
|
+
gem 'sequel'
|
29
|
+
gem 'sinatra'
|
30
|
+
gem 'sqlite3'
|
31
|
+
end
|
32
|
+
|
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
|
+
# Sinatra setup
|
41
|
+
require 'sinatra/base'
|
42
|
+
require 'logger'
|
43
|
+
# Sinatra application
|
44
|
+
class PagyKeyset < Sinatra::Base
|
45
|
+
include Pagy::Backend
|
46
|
+
# Root route/action
|
47
|
+
get '/' do
|
48
|
+
@order = { animal: :asc, name: :asc, birthdate: :desc, id: :asc }
|
49
|
+
@pagy, @pets = pagy_keyset(Pet.order(:animal, :name, Sequel.desc(:birthdate), :id))
|
50
|
+
erb :main
|
51
|
+
end
|
52
|
+
|
53
|
+
helpers do
|
54
|
+
include Pagy::Frontend
|
55
|
+
|
56
|
+
def order_symbol(dir)
|
57
|
+
{ asc: '↗', desc: '↘' }[dir]
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
# Views
|
62
|
+
template :layout do
|
63
|
+
<<~ERB
|
64
|
+
<!DOCTYPE html>
|
65
|
+
<html lang="en">
|
66
|
+
<html>
|
67
|
+
<head>
|
68
|
+
<title>Pagy Keyset App</title>
|
69
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
70
|
+
<style type="text/css">
|
71
|
+
@media screen { html, body {
|
72
|
+
font-size: 1rem;
|
73
|
+
line-height: 1.2s;
|
74
|
+
padding: 0;
|
75
|
+
margin: 0;
|
76
|
+
} }
|
77
|
+
body {
|
78
|
+
background: white !important;
|
79
|
+
margin: 0 !important;
|
80
|
+
font-family: sans-serif !important;
|
81
|
+
}
|
82
|
+
.content {
|
83
|
+
padding: 1rem 1.5rem 2rem !important;
|
84
|
+
}
|
85
|
+
|
86
|
+
<%= Pagy.root.join('stylesheets', 'pagy.css').read %>
|
87
|
+
</style>
|
88
|
+
</head>
|
89
|
+
<body>
|
90
|
+
<%= yield %>
|
91
|
+
</body>
|
92
|
+
</html>
|
93
|
+
ERB
|
94
|
+
end
|
95
|
+
|
96
|
+
template :main do
|
97
|
+
<<~ERB
|
98
|
+
<div class="content">
|
99
|
+
<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>
|
102
|
+
<h2>Versions</h2>
|
103
|
+
<ul>
|
104
|
+
<li>Ruby: <%= RUBY_VERSION %></li>
|
105
|
+
<li>Rack: <%= Rack::RELEASE %></li>
|
106
|
+
<li>Sinatra: <%= Sinatra::VERSION %></li>
|
107
|
+
<li>Pagy: <%= Pagy::VERSION %></li>
|
108
|
+
</ul>
|
109
|
+
|
110
|
+
<h3>Collection</h3>
|
111
|
+
<div id="records" class="collection">
|
112
|
+
<table border="1" cellspacing="0" cellpadding="3">
|
113
|
+
<tr>
|
114
|
+
<th>animal <%= order_symbol(@order[:animal]) %></th>
|
115
|
+
<th>name <%= order_symbol(@order[:name]) %></th>
|
116
|
+
<th>birthdate <%= order_symbol(@order[:birthdate]) %></th>
|
117
|
+
<th>id <%= order_symbol(@order[:id]) %></th>
|
118
|
+
</tr>
|
119
|
+
<% @pets.each do |pet| %>
|
120
|
+
<tr>
|
121
|
+
<td><%= pet.animal %></td>
|
122
|
+
<td><%= pet.name %></td>
|
123
|
+
<td><%= pet.birthdate %></td>
|
124
|
+
<td><%= pet.id %></td>
|
125
|
+
</tr>
|
126
|
+
<% end %>
|
127
|
+
</table>
|
128
|
+
</div>
|
129
|
+
<p>
|
130
|
+
<nav class="pagy" id="next" aria-label="Pagy next">
|
131
|
+
<%= pagy_next_a(@pagy, text: 'Next page >') %>
|
132
|
+
</nav>
|
133
|
+
</div>
|
134
|
+
ERB
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
# Sequel setup
|
139
|
+
require 'sequel'
|
140
|
+
Sequel.default_timezone = :utc
|
141
|
+
# SQLite DB files
|
142
|
+
dir = ENV['APP_ENV'].equal?('development') ? '.' : Dir.pwd # app dir in dev or pwd otherwise
|
143
|
+
abort "ERROR: Cannot create DB files: the directory #{dir.inspect} is not writable." \
|
144
|
+
unless File.writable?(dir)
|
145
|
+
# Connection
|
146
|
+
output = ENV['APP_ENV'].equal?('showcase') ? IO::NULL : $stdout
|
147
|
+
DB = Sequel.connect(adapter: 'sqlite', user: 'root', password: 'password', host: 'localhost', port: '3306',
|
148
|
+
database: "#{dir}/tmp/pagy-keyset-s.sqlite3", max_connections: 10, loggers: [Logger.new(output)])
|
149
|
+
# Schema
|
150
|
+
DB.create_table! :pets do
|
151
|
+
primary_key :id
|
152
|
+
String :animal, unique: false, null: false
|
153
|
+
String :name, unique: false, null: false
|
154
|
+
Date :birthdate, unique: false, null: false
|
155
|
+
end
|
156
|
+
|
157
|
+
# Models
|
158
|
+
class Pet < Sequel::Model; end
|
159
|
+
|
160
|
+
data = <<~DATA
|
161
|
+
Luna | dog | 2018-03-10
|
162
|
+
Coco | cat | 2019-05-15
|
163
|
+
Dodo | dog | 2020-06-25
|
164
|
+
Wiki | bird | 2018-03-12
|
165
|
+
Baby | rabbit | 2020-01-13
|
166
|
+
Neki | horse | 2021-07-20
|
167
|
+
Tino | donkey | 2019-06-18
|
168
|
+
Plot | cat | 2022-09-21
|
169
|
+
Riki | cat | 2018-09-14
|
170
|
+
Susi | horse | 2018-10-26
|
171
|
+
Coco | pig | 2020-08-29
|
172
|
+
Momo | bird | 2023-08-25
|
173
|
+
Lili | cat | 2021-07-22
|
174
|
+
Beli | pig | 2020-07-26
|
175
|
+
Rocky | bird | 2022-08-19
|
176
|
+
Vyvy | dog | 2018-05-16
|
177
|
+
Susi | horse | 2024-01-25
|
178
|
+
Ella | cat | 2020-02-20
|
179
|
+
Rocky | dog | 2019-09-19
|
180
|
+
Juni | rabbit | 2020-08-24
|
181
|
+
Coco | bird | 2021-03-17
|
182
|
+
Susi | dog | 2021-07-28
|
183
|
+
Luna | horse | 2023-05-14
|
184
|
+
Gigi | pig | 2022-05-19
|
185
|
+
Coco | cat | 2020-02-20
|
186
|
+
Nino | donkey | 2019-06-17
|
187
|
+
Luna | cat | 2022-02-09
|
188
|
+
Popi | dog | 2020-09-26
|
189
|
+
Lili | pig | 2022-06-18
|
190
|
+
Mina | horse | 2021-04-21
|
191
|
+
Susi | rabbit | 2023-05-18
|
192
|
+
Toni | donkey | 2018-06-22
|
193
|
+
Rocky | horse | 2019-09-28
|
194
|
+
Lili | cat | 2019-03-18
|
195
|
+
Roby | cat | 2022-06-19
|
196
|
+
Anto | horse | 2022-08-18
|
197
|
+
Susi | pig | 2021-04-21
|
198
|
+
Boly | bird | 2020-03-29
|
199
|
+
Sky | cat | 2023-07-19
|
200
|
+
Lili | dog | 2020-01-28
|
201
|
+
Fami | snake | 2023-04-27
|
202
|
+
Lopi | pig | 2019-06-19
|
203
|
+
Rocky | snake | 2022-03-13
|
204
|
+
Denis | dog | 2022-06-19
|
205
|
+
Maca | cat | 2022-06-19
|
206
|
+
Luna | dog | 2022-08-15
|
207
|
+
Jeme | horse | 2019-08-08
|
208
|
+
Sary | bird | 2023-04-29
|
209
|
+
Rocky | bird | 2023-05-14
|
210
|
+
Coco | dog | 2023-05-27
|
211
|
+
DATA
|
212
|
+
|
213
|
+
dataset = DB[:pets]
|
214
|
+
data.each_line(chomp: true) do |pet|
|
215
|
+
name, animal, birthdate = pet.split('|').map(&:strip)
|
216
|
+
dataset.insert(name:, animal:, birthdate:)
|
217
|
+
end
|
218
|
+
|
219
|
+
run PagyKeyset
|
data/apps/rails.ru
CHANGED
@@ -1,21 +1,22 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
#
|
4
|
-
|
3
|
+
# DESCRIPTION
|
4
|
+
# Reproduce rails related issues
|
5
|
+
#
|
6
|
+
# DOC
|
7
|
+
# https://ddnexus.github.io/pagy/playground/#2-rails-app
|
8
|
+
#
|
9
|
+
# BIN HELP
|
10
|
+
# bundle exec pagy -h
|
11
|
+
#
|
5
12
|
# DEV USAGE
|
6
|
-
# pagy clone rails
|
7
|
-
# pagy ./rails.ru
|
8
|
-
|
13
|
+
# bundle exec pagy clone rails
|
14
|
+
# bundle exec pagy ./rails.ru
|
15
|
+
#
|
9
16
|
# URL
|
10
17
|
# http://0.0.0.0:8000
|
11
18
|
|
12
|
-
|
13
|
-
# pagy -h
|
14
|
-
|
15
|
-
# DOC
|
16
|
-
# https://ddnexus.github.io/pagy/playground/#2-rails-app
|
17
|
-
|
18
|
-
VERSION = '8.6.3'
|
19
|
+
VERSION = '9.3.4'
|
19
20
|
|
20
21
|
# Gemfile
|
21
22
|
require 'bundler/inline'
|
@@ -25,10 +26,8 @@ gemfile(ENV['PAGY_INSTALL_BUNDLE'] == 'true') do
|
|
25
26
|
source 'https://rubygems.org'
|
26
27
|
gem 'oj'
|
27
28
|
gem 'puma'
|
28
|
-
gem 'rails'
|
29
|
-
|
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'
|
29
|
+
gem 'rails', '~> 8.0'
|
30
|
+
gem 'sqlite3'
|
32
31
|
end
|
33
32
|
|
34
33
|
# require 'rails/all' # too much stuff
|
@@ -61,9 +60,10 @@ end
|
|
61
60
|
|
62
61
|
# Pagy initializer
|
63
62
|
require 'pagy/extras/pagy'
|
64
|
-
require 'pagy/extras/
|
63
|
+
require 'pagy/extras/limit'
|
65
64
|
require 'pagy/extras/overflow'
|
66
|
-
|
65
|
+
require 'pagy/extras/headers'
|
66
|
+
Pagy::DEFAULT[:limit] = 10
|
67
67
|
Pagy::DEFAULT[:overflow] = :empty_page
|
68
68
|
Pagy::DEFAULT.freeze
|
69
69
|
|
@@ -90,6 +90,10 @@ class Comment < ActiveRecord::Base # :nodoc:
|
|
90
90
|
belongs_to :post
|
91
91
|
end # :nodoc:
|
92
92
|
|
93
|
+
# Unused model, useful to test overriding conflicts
|
94
|
+
module Calendar
|
95
|
+
end
|
96
|
+
|
93
97
|
# DB seed
|
94
98
|
1.upto(11) do |pi|
|
95
99
|
Post.create(title: "Post #{pi + 1}")
|
@@ -110,6 +114,7 @@ class CommentsController < ActionController::Base # :nodoc:
|
|
110
114
|
|
111
115
|
def index
|
112
116
|
@pagy, @comments = pagy(Comment.all)
|
117
|
+
pagy_headers_merge(@pagy)
|
113
118
|
render inline: TEMPLATE
|
114
119
|
end
|
115
120
|
end
|
@@ -200,8 +205,8 @@ TEMPLATE = <<~ERB
|
|
200
205
|
<h4>pagy_combo_nav_js</h4>
|
201
206
|
<%== pagy_combo_nav_js(@pagy, id: 'combo-nav-js', aria_label: 'Pages combo_nav_js') %>
|
202
207
|
|
203
|
-
<h4>
|
204
|
-
<%==
|
208
|
+
<h4>pagy_limit_selector_js</h4>
|
209
|
+
<%== pagy_limit_selector_js(@pagy, id: 'limit-selector-js') %>
|
205
210
|
|
206
211
|
<h4>pagy_info</h4>
|
207
212
|
<%== pagy_info(@pagy, id: 'pagy-info') %>
|