pagy 9.2.1 → 9.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/apps/calendar.ru +98 -102
- data/apps/demo.ru +256 -244
- data/apps/index.rb +7 -0
- data/apps/keyset_ar.ru +85 -84
- data/apps/keyset_s.ru +81 -84
- data/apps/rails.ru +1 -1
- data/apps/repro.ru +93 -91
- data/bin/pagy +3 -3
- data/config/pagy.rb +1 -1
- data/javascripts/pagy.min.js +2 -2
- data/javascripts/pagy.min.js.map +2 -2
- data/javascripts/pagy.mjs +1 -1
- data/lib/pagy/keyset/active_record.rb +2 -2
- data/lib/pagy/keyset/sequel.rb +2 -2
- data/lib/pagy/keyset.rb +18 -14
- data/lib/pagy.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e174570b9bacea5804827d0f5994386bfd47397c550bc2cef966dda1877cce0b
|
4
|
+
data.tar.gz: 0cba4ea52b5ac0f81bf066f3652e38badbbb919fb1cc1ce8f51174f5cdd9c214
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 11d75d26c1ba9bc1a7dcca114442317319efb4f186487b87442fe7bac6ad5008afb59cd24171234d09ffc7aa7e1eff1148b5fd94df2013e99813d5ae395a6917
|
7
|
+
data.tar.gz: 3ff5bc9a43585c629fd2b72e7e787e78f5760969ff3c1b8f811b497318ddcd6b5d39565ea62730784e380aea77cfb56cc62ba7dc93231ecbd3278b47ecf8b15b
|
data/apps/calendar.ru
CHANGED
@@ -16,7 +16,7 @@
|
|
16
16
|
# URL
|
17
17
|
# http://0.0.0.0:8000
|
18
18
|
|
19
|
-
VERSION = '9.
|
19
|
+
VERSION = '9.3.0'
|
20
20
|
|
21
21
|
# Bundle
|
22
22
|
require 'bundler/inline'
|
@@ -24,67 +24,23 @@ require 'bundler'
|
|
24
24
|
Bundler.configure
|
25
25
|
gemfile(ENV['PAGY_INSTALL_BUNDLE'] == 'true') do
|
26
26
|
source 'https://rubygems.org'
|
27
|
+
gem 'activerecord'
|
28
|
+
gem 'activesupport'
|
27
29
|
gem 'groupdate'
|
28
30
|
gem 'puma'
|
29
|
-
gem '
|
31
|
+
gem 'sinatra'
|
30
32
|
gem 'sqlite3'
|
31
33
|
end
|
32
34
|
|
33
|
-
# require 'rails/all' # too much stuff
|
34
|
-
require 'action_controller/railtie'
|
35
|
-
require 'active_record'
|
36
|
-
|
37
|
-
OUTPUT = Rails.env.showcase? ? IO::NULL : $stdout
|
38
|
-
|
39
|
-
# Rails config
|
40
|
-
class Calendar < Rails::Application # :nodoc:
|
41
|
-
config.root = __dir__
|
42
|
-
config.session_store :cookie_store, key: 'cookie_store_key'
|
43
|
-
Rails.application.credentials.secret_key_base = 'absolute_secret'
|
44
|
-
|
45
|
-
config.logger = Logger.new(OUTPUT)
|
46
|
-
Rails.logger = config.logger
|
47
|
-
|
48
|
-
routes.draw do
|
49
|
-
root to: 'events#index'
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
# AR config
|
54
|
-
dir = Rails.env.development? ? '.' : Dir.pwd # app dir in dev or pwd otherwise
|
55
|
-
abort "ERROR: Cannot create DB files: the directory #{dir.inspect} is not writable." \
|
56
|
-
unless File.writable?(dir)
|
57
|
-
|
58
35
|
# Pagy initializer
|
59
36
|
require 'pagy/extras/calendar'
|
60
37
|
require 'pagy/extras/bootstrap'
|
61
38
|
Pagy::DEFAULT.freeze
|
62
39
|
|
63
|
-
#
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
# Activerecord initializer
|
68
|
-
ActiveRecord::Base.logger = Logger.new(OUTPUT)
|
69
|
-
ActiveRecord::Base.establish_connection(adapter: 'sqlite3', database: "#{dir}/tmp/calendar.sqlite3")
|
70
|
-
ActiveRecord::Schema.define do
|
71
|
-
create_table :events, force: true do |t|
|
72
|
-
t.string :title
|
73
|
-
t.timestamp :time
|
74
|
-
end
|
75
|
-
end
|
76
|
-
|
77
|
-
# Models
|
78
|
-
class Event < ActiveRecord::Base; end
|
79
|
-
|
80
|
-
# Helpers
|
81
|
-
module EventsHelper
|
82
|
-
include Pagy::Frontend
|
83
|
-
end
|
84
|
-
|
85
|
-
# Controllers
|
86
|
-
class EventsController < ActionController::Base
|
87
|
-
include Rails.application.routes.url_helpers
|
40
|
+
# Sinatra setup
|
41
|
+
require 'sinatra/base'
|
42
|
+
# Sinatra application
|
43
|
+
class PagyCalendar < Sinatra::Base
|
88
44
|
include Pagy::Backend
|
89
45
|
|
90
46
|
# This method must be implemented by the application.
|
@@ -113,7 +69,8 @@ class EventsController < ActionController::Base
|
|
113
69
|
unless params[:skip_counts] == 'true'
|
114
70
|
end
|
115
71
|
|
116
|
-
|
72
|
+
# Root route/action
|
73
|
+
get '/' do
|
117
74
|
# Groupdate does not support time zones with SQLite.
|
118
75
|
# 'UTC' does not work on certain machines config (pulling the actual local time zone utc_offset)
|
119
76
|
# so for this demo we use a different zone with utc_offset 0
|
@@ -129,44 +86,55 @@ class EventsController < ActionController::Base
|
|
129
86
|
month: {},
|
130
87
|
day: {},
|
131
88
|
active: !params[:skip])
|
132
|
-
|
89
|
+
erb :main
|
133
90
|
end
|
134
|
-
end
|
135
91
|
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
<html>
|
140
|
-
<head>
|
141
|
-
<title>Pagy Calendar App</title>
|
142
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
143
|
-
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css"
|
144
|
-
integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
|
92
|
+
helpers do
|
93
|
+
include Pagy::Frontend
|
94
|
+
end
|
145
95
|
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
}
|
158
|
-
.content {
|
159
|
-
padding: 1rem 1.5rem 2rem;
|
160
|
-
}
|
161
|
-
/* added with the pagy counts feature */
|
162
|
-
a.empty-page {
|
163
|
-
color: #888888;
|
164
|
-
}
|
165
|
-
</style>
|
166
|
-
</head>
|
96
|
+
# Views
|
97
|
+
template :layout do
|
98
|
+
<<~ERB
|
99
|
+
<!DOCTYPE html>
|
100
|
+
<html lang="en">
|
101
|
+
<html>
|
102
|
+
<head>
|
103
|
+
<title>Pagy Calendar App</title>
|
104
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
105
|
+
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css"
|
106
|
+
integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
|
167
107
|
|
168
|
-
|
108
|
+
<style type="text/css">
|
109
|
+
@media screen { html, body {
|
110
|
+
font-size: .8rem;
|
111
|
+
line-height: 1.1s;
|
112
|
+
padding: 0;
|
113
|
+
margin: 0;
|
114
|
+
} }
|
115
|
+
body {
|
116
|
+
background-color: #f7f7f7;
|
117
|
+
color: #51585F;"
|
118
|
+
font-family: sans-serif;
|
119
|
+
}
|
120
|
+
.content {
|
121
|
+
padding: 1rem 1.5rem 2rem;
|
122
|
+
}
|
123
|
+
/* added with the pagy counts feature */
|
124
|
+
a.empty-page {
|
125
|
+
color: #888888;
|
126
|
+
}
|
127
|
+
</style>
|
128
|
+
</head>
|
169
129
|
|
130
|
+
<body>
|
131
|
+
<%= yield %>
|
132
|
+
</body>
|
133
|
+
</html>
|
134
|
+
ERB
|
135
|
+
end
|
136
|
+
template :main do
|
137
|
+
<<~ERB
|
170
138
|
<div class="container">
|
171
139
|
<h1>Pagy Calendar App</h1>
|
172
140
|
<p>Self-contained, standalone app implementing nested calendar pagination for year, month, day units.</p>
|
@@ -174,10 +142,10 @@ TEMPLATE = <<~ERB
|
|
174
142
|
<p>Please, report the following versions in any new issue.</p>
|
175
143
|
<h2>Versions</h2>
|
176
144
|
<ul>
|
177
|
-
<li>Ruby:
|
178
|
-
<li>Rack:
|
179
|
-
<li>
|
180
|
-
<li>Pagy:
|
145
|
+
<li>Ruby: <%= RUBY_VERSION %></li>
|
146
|
+
<li>Rack: <%= Rack::RELEASE %></li>
|
147
|
+
<li>Sinatra: <%= Sinatra::VERSION %></li>
|
148
|
+
<li>Pagy: <%= Pagy::VERSION %></li>
|
181
149
|
</ul>
|
182
150
|
<hr>
|
183
151
|
|
@@ -196,14 +164,14 @@ TEMPLATE = <<~ERB
|
|
196
164
|
<!-- calendar filtering navs -->
|
197
165
|
<% if @calendar %>
|
198
166
|
<p>Showtime: <%= @calendar.showtime %></p>
|
199
|
-
|
200
|
-
|
201
|
-
|
167
|
+
<%= pagy_bootstrap_nav(@calendar[:year], id: "year-nav", aria_label: "Years") %> <!-- year nav -->
|
168
|
+
<%= pagy_bootstrap_nav(@calendar[:month], id: "month-nav", aria_label: "Months") %> <!-- month nav -->
|
169
|
+
<%= pagy_bootstrap_nav(@calendar[:day], id: "day-nav", aria_label: "Days") %> <!-- day nav -->
|
202
170
|
<% end %>
|
203
171
|
|
204
172
|
<!-- page info extended for the calendar unit -->
|
205
173
|
<div class="alert alert-primary" role="alert">
|
206
|
-
|
174
|
+
<%= pagy_info(@pagy, id: 'pagy-info') %>
|
207
175
|
<% if @calendar %>
|
208
176
|
for <b><%= @calendar.showtime.strftime('%Y-%m-%d') %></b>
|
209
177
|
<% end %>
|
@@ -217,13 +185,41 @@ TEMPLATE = <<~ERB
|
|
217
185
|
</div>
|
218
186
|
|
219
187
|
<!-- standard pagination of the selected month -->
|
220
|
-
<p
|
188
|
+
<p><%= pagy_bootstrap_nav(@pagy, id: 'pages-nav', aria_label: 'Pages') if @pagy.pages > 1 %><p/>
|
221
189
|
</div>
|
222
|
-
|
223
|
-
|
224
|
-
|
190
|
+
ERB
|
191
|
+
end
|
192
|
+
end
|
193
|
+
|
194
|
+
# ActiveRecord setup
|
195
|
+
require 'active_record'
|
196
|
+
# Log
|
197
|
+
output = ENV['APP_ENV'].equal?('showcase') ? IO::NULL : $stdout
|
198
|
+
ActiveRecord::Base.logger = Logger.new(output)
|
199
|
+
# SQLite DB files
|
200
|
+
dir = ENV['APP_ENV'].equal?('development') ? '.' : Dir.pwd # app dir in dev or pwd otherwise
|
201
|
+
abort "ERROR: Cannot create DB files: the directory #{dir.inspect} is not writable." \
|
202
|
+
unless File.writable?(dir)
|
203
|
+
# Connection
|
204
|
+
ActiveRecord::Base.establish_connection(adapter: 'sqlite3', database: "#{dir}/tmp/pagy-calendar.sqlite3")
|
205
|
+
|
206
|
+
# Groupdate initializer (https://github.com/ankane/groupdate)
|
207
|
+
# Groupdate week_start default is :sunday, while rails and pagy default to :monday
|
208
|
+
Groupdate.week_start = :monday
|
209
|
+
ActiveSupport.to_time_preserves_timezone = :zone # Fix ActiveSupport deprecation
|
210
|
+
|
211
|
+
ActiveRecord::Schema.define do
|
212
|
+
create_table :events, force: true do |t|
|
213
|
+
t.string :title
|
214
|
+
t.timestamp :time
|
215
|
+
end
|
216
|
+
end
|
217
|
+
|
218
|
+
# Models
|
219
|
+
class Event < ActiveRecord::Base; end
|
225
220
|
|
226
|
-
|
221
|
+
# Event times
|
222
|
+
data = <<~DATA
|
227
223
|
2021-10-21 13:18:23 +0000
|
228
224
|
2021-10-21 23:14:50 +0000
|
229
225
|
2021-10-23 01:06:02 +0000
|
@@ -729,13 +725,13 @@ TIMES = <<~TIMES
|
|
729
725
|
2023-11-12 04:22:50 +0000
|
730
726
|
2023-11-12 08:38:58 +0000
|
731
727
|
2023-11-13 15:43:40 +0000
|
732
|
-
|
728
|
+
DATA
|
733
729
|
|
734
730
|
# DB seed
|
735
731
|
events = []
|
736
|
-
|
732
|
+
data.each_line(chomp: true).with_index do |time, i|
|
737
733
|
events << { title: "Event ##{i + 1}", time: }
|
738
734
|
end
|
739
735
|
Event.insert_all(events)
|
740
736
|
|
741
|
-
run
|
737
|
+
run PagyCalendar
|