Skip to content

Commit 6b8edea

Browse files
author
Lewis Youl
committed
refactor: replace will_paginate with pagy
1 parent d005005 commit 6b8edea

File tree

15 files changed

+252
-52
lines changed

15 files changed

+252
-52
lines changed

Gemfile

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,10 @@ gem 'active_model_serializers', '~> 0.10.0'
2222

2323
gem 'byebug'
2424

25+
gem 'pagy', '~> 3.5'
26+
2527
gem "devise", github: "heartcombo/devise", branch: "master"
2628
gem "aws-sdk-s3", require: false
27-
gem 'will_paginate', '~> 3.1.0'
2829
gem 'redis'
2930
gem 'omniauth-github'
3031
gem 'omniauth-rails_csrf_protection'

Gemfile.lock

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,7 @@ GEM
165165
actionpack (>= 4.2)
166166
omniauth (~> 2.0)
167167
orm_adapter (0.5.0)
168+
pagy (3.11.0)
168169
pg (1.2.3)
169170
public_suffix (4.0.6)
170171
puma (4.3.3)
@@ -257,7 +258,6 @@ GEM
257258
websocket-driver (0.7.1)
258259
websocket-extensions (>= 0.1.0)
259260
websocket-extensions (0.1.4)
260-
will_paginate (3.1.8)
261261
zeitwerk (2.3.0)
262262

263263
PLATFORMS
@@ -274,6 +274,7 @@ DEPENDENCIES
274274
listen (>= 3.0.5, < 3.2)
275275
omniauth-github
276276
omniauth-rails_csrf_protection
277+
pagy (~> 3.5)
277278
pg (>= 0.18, < 2.0)
278279
puma (~> 4.1)
279280
rails (~> 6.0.2, >= 6.0.2.2)
@@ -286,7 +287,6 @@ DEPENDENCIES
286287
tzinfo-data
287288
web-console (>= 3.3.0)
288289
webpacker (~> 4.0)
289-
will_paginate (~> 3.1.0)
290290

291291
RUBY VERSION
292292
ruby 2.6.6p146

app/controllers/application_controller.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
class ApplicationController < ActionController::Base
2+
include Pagy::Backend
3+
24
respond_to :html, :json
35
serialization_scope :view_context
46
before_action :configure_permitted_parameters, if: :devise_controller?

app/controllers/folders_controller.rb

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,18 +16,18 @@ def popover
1616
def index
1717
@snippets = Snippet.last(5)
1818

19-
@folders = current_user.folders
20-
@folders = @folders.where('name ILIKE ?', "%#{params[:search]}%") if params[:search].present?
21-
@folders = @folders
22-
.order(name: :asc)
23-
.paginate(page: params[:page] || 1, per_page: 30)
19+
folders = current_user.folders
20+
folders = folders.where('name ILIKE ?', "%#{params[:search]}%") if params[:search].present?
21+
folders = folders.order(name: :asc)
22+
23+
@pagy, @folders = pagy(folders, items: 30)
2424

2525
respond_to do |format|
2626
format.html
2727
format.json do
2828
render json: {
2929
entries: render_to_string(partial: 'folders/folders', locals: { folders: @folders }, formats: [:html]),
30-
pagination: view_context.will_paginate(@folders)
30+
pagination: view_context.pagy_nav(@pagy)
3131
}
3232
end
3333
end
@@ -43,14 +43,15 @@ def show
4343

4444
@snippets = @snippets
4545
.order(created_at: :desc)
46-
.paginate(page: params[:page] || 1, per_page: 6)
46+
47+
@pagy, @snippets = pagy(@snippets, items: 6)
4748

4849
respond_to do |format|
4950
format.html
5051
format.json do
5152
render json: {
5253
entries: render_to_string(partial: 'snippets/snippets', formats: [:html]),
53-
pagination: view_context.will_paginate(@snippets)
54+
pagination: view_context.pagy_nav(@pagy)
5455
}
5556
end
5657
end

app/controllers/home_controller.rb

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,53 +1,56 @@
11
class HomeController < ApplicationController
2+
SNIPPETS_PER_PAGE = 6.freeze
3+
CONNECT_USERS_PER_PAGE = 16.freeze
4+
25
def index
36
@page_title = 'Home'
47
@display_popover = true
58

69
@languages = Language.order(name: :asc).to_json
710

8-
if user_signed_in?
11+
snippets = if user_signed_in?
912
@snippets = current_user
1013
.snippets_for_feed
1114
.includes(:language)
12-
.paginate(page: params[:page] || 1, per_page: 6)
1315
else
1416
# temp fix for when user not signed in
15-
@snippets = Snippet
17+
Snippet
1618
.public_snippets
1719
.includes(:user, :language)
1820
.order(created_at: :desc)
19-
.paginate(page: params[:page] || 1, per_page: 6)
2021
end
2122

23+
@pagy, @snippets = pagy(snippets, items: SNIPPETS_PER_PAGE)
24+
2225
respond_to do |format|
2326
format.html
2427
format.json do
2528
render json: {
2629
entries: render_to_string(partial: 'snippets/snippets', formats: [:html]),
27-
pagination: view_context.will_paginate(@snippets)
30+
pagination: view_context.pagy_nav(@pagy)
2831
}
2932
end
3033
end
3134
end
3235

3336
def connect
34-
@users = if user_signed_in?
37+
users = if user_signed_in?
3538
current_user.not_following
36-
.paginate(page: params[:page] || 1, per_page: 16)
3739
else
3840
User.order(updated_at: :desc)
39-
.paginate(page: params[:page] || 1, per_page: 16)
4041
end
4142

4243
# TODO: Extract this logic to model/service
43-
@users = @users.where('name ILIKE ?', "%#{params[:search]}%") if params[:search]
44+
users = users.where('name ILIKE ?', "%#{params[:search]}%") if params[:search]
45+
46+
@pagy, @users = pagy(users, items: CONNECT_USERS_PER_PAGE)
4447

4548
respond_to do |format|
4649
format.html
4750
format.json do
4851
render json: {
4952
entries: render_to_string(partial: 'users/follow_previews', formats: [:html]),
50-
pagination: view_context.will_paginate(@users)
53+
pagination: view_context.pagy_nav(@pagy)
5154
}
5255
end
5356
end

app/controllers/snippets_controller.rb

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ class SnippetsController < ApplicationController
22
before_action :authenticate_user!, except: :show
33

44
def index
5-
@page_title = 'Stanley / Snippet'
5+
@page_title = 'Snippet'
66
@user = User.find_by(id: params[:user_id]) || current_user
77
@display_popover = true
88
@snippets = @user.filed_snippets.includes(:user, :folders)
@@ -11,9 +11,9 @@ def index
1111
# TODO: Extract this logic to model/service
1212
@snippets = @snippets.where('description ILIKE ?', "%#{params[:search]}%") if params[:search]
1313

14-
@snippets = @snippets
15-
.order(created_at: :desc)
16-
.paginate(page: params[:page] || 1, per_page: 6)
14+
@snippets = @snippets.order(created_at: :desc)
15+
16+
@pagy, @snippets = pagy(@snippets, items: 6)
1717

1818
respond_to do |format|
1919
format.html do
@@ -22,7 +22,7 @@ def index
2222
format.json do
2323
render json: {
2424
entries: render_to_string(partial: 'snippets/snippets', formats: [:html]),
25-
pagination: view_context.will_paginate(@snippets)
25+
pagination: view_context.pagy_nav(@pagy)
2626
}
2727
end
2828
end

app/controllers/users_controller.rb

Lines changed: 41 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -6,27 +6,48 @@ def index
66
end
77

88
def show
9-
@user = User.find_by(id: params[:id])
10-
@page_title = "#{@user.name}"
11-
@serialized_user = @user.serialize.to_json
12-
@is_following = current_user ? current_user.following?(@user) : false
13-
@followers = @user.followers
14-
@following = @user.following
15-
@display_popover = true
16-
@languages = Language.all.to_json
17-
18-
# need to change current implementation to hit specific user snippets endpoint so can optionally show private ones
19-
if @user == current_user
20-
@snippets = @user.filed_snippets
21-
.order(created_at: :desc)
22-
.paginate(page: 1, per_page: 6)
23-
else
24-
@snippets = @user.filed_snippets.public_snippets
25-
.order(created_at: :desc)
26-
.paginate(page: 1, per_page: 6)
27-
end
9+
respond_to do |format|
10+
format.html do
11+
@user = User.find_by(id: params[:id])
12+
@page_title = "#{@user.name}"
13+
@serialized_user = @user.serialize.to_json
14+
@is_following = current_user ? current_user.following?(@user) : false
15+
@followers = @user.followers
16+
@following = @user.following
17+
@display_popover = true
18+
@languages = Language.all.to_json
19+
20+
# need to change current implementation to hit specific user snippets endpoint so can optionally show private ones
21+
snippets = if @user == current_user
22+
@user.filed_snippets
23+
.order(created_at: :desc)
24+
else
25+
@user.filed_snippets.public_snippets
26+
.order(created_at: :desc)
27+
end
28+
29+
@pagy, @snippets = pagy(snippets, items: 6)
30+
31+
@tab_id = params[:tab_id] || :snippets
32+
end
33+
34+
format.json do
35+
@user = User.find_by(id: params[:id])
36+
@snippets = @user.filed_snippets.includes(:user, :folders)
37+
@languages = Language.all.to_json
2838

29-
@tab_id = params[:tab_id] || :snippets
39+
# TODO: Extract this logic to model/service
40+
@snippets = @snippets.where('description ILIKE ?', "%#{params[:search]}%") if params[:search]
41+
42+
@snippets = @snippets.order(created_at: :desc)
43+
44+
@pagy, @snippets = pagy(@snippets, items: 6)
45+
render json: {
46+
entries: render_to_string(partial: 'snippets/snippets', formats: [:html]),
47+
pagination: view_context.pagy_nav(@pagy)
48+
}
49+
end
50+
end
3051
end
3152

3253
def hovercard

app/helpers/application_helper.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
module ApplicationHelper
2+
include Pagy::Frontend
3+
24
def tabs_class_for_active_tab(tab_id, param_tab_id)
35
"tabs--header-active" if tab_id.to_sym == param_tab_id.to_sym
46
end

app/views/folders/index.html.erb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,6 @@
4646
</div>
4747

4848
<div data-infinite-scroll-window-target="pagination" class="hidden">
49-
<%= will_paginate @folders, container: false %>
49+
<%== pagy_nav(@pagy) %>
5050
</div>
5151
</div>

app/views/folders/show.html.erb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,6 @@
2525
</div>
2626

2727
<div data-infinite-scroll-window-target="pagination" class="hidden">
28-
<%= will_paginate @snippets, container: false %>
28+
<%== pagy_nav(@pagy) %>
2929
</div>
3030
</div>

app/views/home/index.html.erb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,6 @@
99
</div>
1010

1111
<div data-infinite-scroll-window-target="pagination" class="hidden">
12-
<%= will_paginate @snippets, container: false %>
12+
<%== pagy_nav(@pagy) %>
1313
</div>
1414
</div>

app/views/infinite_scroll/_basic_list.html.erb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,5 @@
55
<% end %>
66

77
<div data-infinite-scroll-window-target="pagination" class="hidden">
8-
<%= will_paginate @users, container: false %>
8+
<%== pagy_nav(@pagy) %>
99
</div>

app/views/snippets/index.html.erb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,6 @@
2121
</div>
2222

2323
<div data-infinite-scroll-window-target="pagination" class="hidden">
24-
<%= will_paginate @snippets, container: false %>
24+
<%== pagy_nav(@pagy) %>
2525
</div>
2626
</div>

app/views/users/show.html.erb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@
5959
</div>
6060

6161
<div data-infinite-scroll-window-target="pagination" class="hidden">
62-
<%= will_paginate @snippets, container: false, params: { controller: "snippets", action: "index" } %>
62+
<%== pagy_nav(@pagy) %>
6363
</div>
6464
</div>
6565
</div>

0 commit comments

Comments
 (0)