Skip to content

Commit

Permalink
Merge pull request #1231 from openjournals/pagination
Browse files Browse the repository at this point in the history
Pagination: migrate from will_paginate to pagy
  • Loading branch information
xuanxu committed Jun 6, 2023
2 parents 5c0f5d6 + c253bd2 commit a3efda7
Show file tree
Hide file tree
Showing 16 changed files with 133 additions and 109 deletions.
2 changes: 1 addition & 1 deletion Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ gem 'omniauth-rails_csrf_protection'
gem 'octokit', '~> 6.0'
gem 'pdf-reader', '~> 2.11.0'
gem 'pg', '~> 1.4.6'
gem 'will_paginate', '~> 4.0.0'
gem 'pagy'
gem 'rails', '7.0.5'
gem "importmap-rails"
gem "turbo-rails"
Expand Down
4 changes: 2 additions & 2 deletions Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -293,6 +293,7 @@ GEM
omniauth (~> 2.0)
openssl (3.1.0)
os (1.1.4)
pagy (6.0.4)
pdf-reader (2.11.0)
Ascii85 (~> 1.0)
afm (~> 0.2.1)
Expand Down Expand Up @@ -459,7 +460,6 @@ GEM
websocket-driver (0.7.5)
websocket-extensions (>= 0.1.0)
websocket-extensions (0.1.5)
will_paginate (4.0.0)
xpath (3.2.0)
nokogiri (~> 1.8)
zeitwerk (2.6.8)
Expand Down Expand Up @@ -495,6 +495,7 @@ DEPENDENCIES
octokit (~> 6.0)
omniauth-orcid (~> 2.1.1)
omniauth-rails_csrf_protection
pagy
pdf-reader (~> 2.11.0)
pg (~> 1.4.6)
pry-byebug
Expand All @@ -518,7 +519,6 @@ DEPENDENCIES
vcr (~> 6.1, >= 6.1.0)
web-console (~> 4.2.0)
webmock
will_paginate (~> 4.0.0)

RUBY VERSION
ruby 3.2.2p53
Expand Down
1 change: 1 addition & 0 deletions app/controllers/application_controller.rb
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
class ApplicationController < ActionController::Base
include Pagy::Backend
rescue_from ActiveRecord::RecordNotFound, with: :record_not_found

# Prevent CSRF attacks by raising an exception.
Expand Down
45 changes: 9 additions & 36 deletions app/controllers/home_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -57,21 +57,12 @@ def reviews
@editor = Editor.find_by_login(params[:editor])

if sort == "active"
@papers = Paper.unscoped.in_progress.where(editor: @editor).order(last_activity: @order).paginate(
page: params[:page],
per_page: 20
)
@pagy, @papers = pagy(Paper.unscoped.in_progress.where(editor: @editor).order(last_activity: @order))
else
@papers = Paper.unscoped.in_progress.where(editor: @editor).order(created_at: @order).paginate(
page: params[:page],
per_page: 20
)
@pagy, @papers = pagy(Paper.unscoped.in_progress.where(editor: @editor).order(created_at: @order))
end
else
@papers = Paper.everything.paginate(
page: params[:page],
per_page: 20
)
@pagy, @papers = pagy(Paper.everything)
end
end

Expand All @@ -82,15 +73,9 @@ def incoming
@order = params[:order].to_s.end_with?("-asc") ? "asc" : "desc"

if params[:order].to_s.include?("active-")
@papers = incoming_scope.order(last_activity: @order).paginate(
page: params[:page],
per_page: 20
)
@pagy, @papers = pagy(incoming_scope.order(last_activity: @order))
else
@papers = incoming_scope.order(created_at: @order).paginate(
page: params[:page],
per_page: 20
)
@pagy, @papers = pagy(incoming_scope.order(created_at: @order))
end

load_pending_invitations_for_papers(@papers)
Expand All @@ -108,15 +93,9 @@ def in_progress
@order = params[:order].to_s.end_with?("-asc") ? "asc" : "desc"

if params[:order].to_s.include?("active-")
@papers = in_progress_scope.order(last_activity: @order).paginate(
page: params[:page],
per_page: 20
)
@pagy, @papers = pagy(in_progress_scope.order(last_activity: @order))
else
@papers = in_progress_scope.order(created_at: @order).paginate(
page: params[:page],
per_page: 20
)
@pagy, @papers = pagy(in_progress_scope.order(created_at: @order))
end

load_pending_invitations_for_papers(@papers)
Expand All @@ -132,15 +111,9 @@ def all
@order = params[:order].to_s.end_with?("-asc") ? "asc" : "desc"

if params[:order].to_s.include?("active-")
@papers = all_scope.order(last_activity: @order).paginate(
page: params[:page],
per_page: 20
)
@pagy, @papers = pagy(all_scope.order(last_activity: @order))
else
@papers = all_scope.order(created_at: @order).paginate(
page: params[:page],
per_page: 20
)
@pagy, @papers = pagy(all_scope.order(created_at: @order))
end

load_pending_invitations_for_papers(@papers)
Expand Down
4 changes: 1 addition & 3 deletions app/controllers/invitations_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,7 @@ class InvitationsController < ApplicationController
def index
invitations_scope = @track.present? ? Invitation.by_track(@track.id) : Invitation

@invitations = invitations_scope.includes(:editor, :paper).
order(created_at: :desc).
paginate(page: params[:page], per_page: 25)
@pagy, @invitations = pagy(invitations_scope.includes(:editor, :paper).order(created_at: :desc), items: 25)
end

def expire
Expand Down
75 changes: 25 additions & 50 deletions app/controllers/papers_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,7 @@ class PapersController < ApplicationController
before_action :require_aeic, only: %w(start_meta_review archive reject change_track)

def recent
@papers = Paper.visible.paginate(
page: params[:page],
per_page: 10
)
@pagy, @papers = pagy(Paper.visible, items: 10)

@selected = "recent"

Expand All @@ -23,10 +20,7 @@ def recent
end

def index
@papers = Paper.public_everything.paginate(
page: params[:page],
per_page: 10
)
@pagy, @papers = pagy(Paper.public_everything, items: 3)

@selected = "all"

Expand All @@ -39,18 +33,11 @@ def index

def popular
if params[:since]
@papers = Paper.unscoped.visible.since(params[:since]).order(accepted_at: :desc).paginate(
page: params[:page],
per_page: 10
)
@pagy, @papers = pagy(Paper.unscoped.visible.since(params[:since]).order(accepted_at: :desc), items: 10)
else
@papers = Paper.unscoped.visible.order(accepted_at: :desc).paginate(
page: params[:page],
per_page: 10
)
@pagy, @papers = pagy(Paper.unscoped.visible.order(accepted_at: :desc), items: 10)
end


@selected = "popular"

respond_to do |format|
Expand All @@ -61,10 +48,7 @@ def popular
end

def active
@papers = Paper.public_in_progress.paginate(
page: params[:page],
per_page: 10
)
@pagy, @papers = pagy(Paper.public_in_progress, items: 10)

@selected = "active"

Expand All @@ -76,15 +60,16 @@ def active
end

def search
@papers = Paper.none.page(1)
@term = "results for empty search"

if params['q']
if params['q'].present?
@papers = Paper.search(params['q'], fields: [:authors, :title, :tags, :languages],
page: params[:page],
per_page: 10)
@pagy = Pagy.new_from_searchkick(@papers)

@term = "search results for '#{params['q']}'"
else
@pagy, @papers = pagy(Paper.none)
@term = "results for empty search"
end

@filtering = true
Expand All @@ -97,65 +82,55 @@ def search
end

def filter
@papers = Paper.none.page(1)
@term = "Empty search term"
if params['language']
@papers = Paper.search(params['language'], fields: [languages: :exact], order: { accepted_at: :desc },
page: params[:page],
per_page: 10
)
per_page: 10)
@term = "in #{params['language']}"

elsif params['author']
@papers = Paper.search(params['author'], fields: [:authors], misspellings: false, order: { accepted_at: :desc },
page: params[:page],
per_page: 10
)
per_page: 10)
@term = "by #{params['author']}"

elsif params['editor']
@papers = Paper.search(params['editor'], fields: [:editor], misspellings: false, order: { accepted_at: :desc },
page: params[:page],
per_page: 10
)
per_page: 10)
@term = "edited by #{params['editor']}"

elsif params['reviewer']
@papers = Paper.search(params['reviewer'], fields: [:reviewers], misspellings: false, order: { accepted_at: :desc },
page: params[:page],
per_page: 10
)
per_page: 10)
@term = "reviewed by #{params['reviewer']}"

elsif params['tag']
@papers = Paper.search(params['tag'], fields: [:tags, :title], order: { accepted_at: :desc },
page: params[:page],
per_page: 10
)
per_page: 10)
@term = "#{params['tag']}"

elsif params['issue']
@papers = Paper.search(params['issue'], fields: [{issue: :exact}], order: { page: :desc },
page: params[:page],
per_page: 10
)
per_page: 10)
@term = "in issue #{params['issue']}"

elsif params['volume']
@papers = Paper.search(params['volume'], fields: [{volume: :exact}], order: { page: :desc },
page: params[:page],
per_page: 10
)
per_page: 10)
@term = "in volume #{params['volume']}"

elsif params['year']
@papers = Paper.search(params['year'], fields: [{year: :exact}], order: { page: :desc },
page: params[:page],
per_page: 10
)
per_page: 10)
@term = "in #{params['year']}"
end

if @papers
@pagy = Pagy.new_from_searchkick(@papers)
else
@pagy, @papers = pagy(Paper.none)
@term = "Empty search term"
end

@filtering = true

respond_to do |format|
Expand Down
1 change: 1 addition & 0 deletions app/helpers/application_helper.rb
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
module ApplicationHelper
include SettingsHelper
include Pagy::Frontend

def flash_class_for(flash_level)
case flash_level
Expand Down
6 changes: 4 additions & 2 deletions app/views/home/reviews.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,9 @@
</table>

<div class="row">
<!-- :class not applying here? --> <div class="pagination_helper"><%= page_entries_info(@papers).capitalize.html_safe %></div>
<%= will_paginate @papers, inner_window: 3, outer_window: 0, page_links: false %>
<div class="pagination_helper">
<%== pagy_info(@pagy, i18n_key: "paper") %>
</div>
<%== pagy_nav @pagy %>
</div>
</div>
6 changes: 4 additions & 2 deletions app/views/invitations/index.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -46,8 +46,10 @@
</tbody>
</table>
<div class="row">
<div class="pagination_helper"><%= page_entries_info(@invitations).capitalize.html_safe %></div>
<%= will_paginate @invitations, page_links: false %>
<div class="pagination_helper">
<%== pagy_info(@pagy, i18n_key: "invitation") %>
</div>
<%== pagy_nav @pagy %>
</div>
<% end %>
</div>
10 changes: 5 additions & 5 deletions app/views/papers/index.atom.builder
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
atom_feed do |feed|
feed.link(rel: 'first', type: "application/atom+xml", href: url_for(format: 'atom', only_path: false))
url_params = {}
[:since, :language].each {|p| url_params.merge!(p => params[p]) if params{p}}
feed.link(rel: 'next', type: "application/atom+xml", href: url_for(params: url_params, format: 'atom', page: @papers.current_page + 1, only_path: false)) unless @papers.current_page == @papers.total_pages
feed.link(rel: 'previous', type: "application/atom+xml", href: url_for(params: url_params, format: 'atom', page: @papers.current_page - 1, only_path: false)) unless @papers.current_page == 1
feed.link(rel: 'last', type: "application/atom+xml", href: url_for(params: url_params, format: 'atom', page: @papers.total_pages, only_path: false))
[:q, :since, :language].each {|p| url_params.merge!(p => params[p]) if params{p}}
feed.link(rel: 'first', type: "application/atom+xml", href: url_for(format: 'atom', only_path: false))
feed.link(rel: 'next', type: "application/atom+xml", href: url_for(params: url_params, format: 'atom', page: @pagy.next, only_path: false)) if @pagy.next
feed.link(rel: 'previous', type: "application/atom+xml", href: url_for(params: url_params, format: 'atom', page: @pagy.prev, only_path: false)) if @pagy.prev
feed.link(rel: 'last', type: "application/atom+xml", href: url_for(params: url_params, format: 'atom', page: @pagy.pages, only_path: false))
feed.title(Rails.application.settings["name"])
feed.updated(@papers[0].accepted_at || @papers[0].created_at) if @papers.length > 0
feed.author do |author|
Expand Down
6 changes: 4 additions & 2 deletions app/views/papers/index.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,9 @@
<%= render partial: "list", locals: { papers: @papers } %>
</div>
<div class="row">
<!-- :class not applying here? --> <div class="pagination_helper"><%= page_entries_info(@papers).capitalize.html_safe %></div>
<%= will_paginate @papers, inner_window: 3, outer_window: 0, page_links: false %>
<div class="pagination_helper">
<%== pagy_info(@pagy, i18n_key: "paper") %>
</div>
<%== pagy_nav @pagy %>
</div>
</div>

0 comments on commit a3efda7

Please sign in to comment.