Skip to content

Commit

Permalink
gem pagy
Browse files Browse the repository at this point in the history
  • Loading branch information
yshmarov committed May 5, 2021
1 parent ef755cf commit 266eba0
Show file tree
Hide file tree
Showing 10 changed files with 211 additions and 1 deletion.
1 change: 1 addition & 0 deletions Gemfile
Expand Up @@ -57,3 +57,4 @@ gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]

gem 'devise'
gem "faker"
gem 'pagy'
2 changes: 2 additions & 0 deletions Gemfile.lock
Expand Up @@ -112,6 +112,7 @@ GEM
nokogiri (1.11.3-x86_64-linux)
racc (~> 1.4)
orm_adapter (0.5.0)
pagy (4.5.1)
pg (1.2.3)
public_suffix (4.0.6)
puma (5.2.2)
Expand Down Expand Up @@ -222,6 +223,7 @@ DEPENDENCIES
faker
jbuilder (~> 2.7)
listen (~> 3.3)
pagy
pg (~> 1.1)
puma (~> 5.0)
rack-mini-profiler (~> 2.0)
Expand Down
1 change: 1 addition & 0 deletions app/controllers/application_controller.rb
@@ -1,3 +1,4 @@
class ApplicationController < ActionController::Base
include Pagy::Backend
before_action :authenticate_user!
end
3 changes: 2 additions & 1 deletion app/controllers/posts_controller.rb
Expand Up @@ -2,7 +2,8 @@ class PostsController < ApplicationController
before_action :set_post, only: %i[ show edit update destroy ]

def index
@posts = Post.order(created_at: :desc)
# @pagy, @posts = pagy(Post.order(created_at: :desc), items: 5)
@pagy, @posts = pagy(Post.order(created_at: :desc))
end

def show
Expand Down
1 change: 1 addition & 0 deletions app/helpers/application_helper.rb
@@ -1,2 +1,3 @@
module ApplicationHelper
include Pagy::Frontend
end
3 changes: 3 additions & 0 deletions app/javascript/packs/application.js
Expand Up @@ -11,3 +11,6 @@ import "channels"
Rails.start()
Turbolinks.start()
ActiveStorage.start()

import 'bootstrap/dist/js/bootstrap'
import "bootstrap/dist/css/bootstrap";
8 changes: 8 additions & 0 deletions app/views/posts/index.html.erb
@@ -1,12 +1,20 @@
<h1>
Posts:
<%= @posts.count %>
/
<%= Post.count %>
</h1>

<%= link_to_unless_current "10", posts_path(items: 10) %>
<%= link_to_unless_current "50", posts_path(items: 50) %>
<%= link_to 'New Post', new_post_path %>

<br>

<%= raw pagy_nav(@pagy) %>
<%== pagy_nav(@pagy) %>
<%== pagy_bootstrap_nav(@pagy) %>

<div style="overflow-x:auto;">
<table>
<thead>
Expand Down
181 changes: 181 additions & 0 deletions config/initializers/pagy.rb
@@ -0,0 +1,181 @@
# frozen_string_literal: true

# Pagy initializer file (4.5.1)
# Customize only what you really need and notice that Pagy works also without any of the following lines.
# Should you just cherry pick part of this file, please maintain the require-order of the extras


# Pagy Variables
# See https://ddnexus.github.io/pagy/api/pagy#variables
# All the Pagy::VARS are set for all the Pagy instances but can be overridden
# per instance by just passing them to Pagy.new or the #pagy controller method


# Instance variables
# See https://ddnexus.github.io/pagy/api/pagy#instance-variables
Pagy::VARS[:page] = 1 # default
Pagy::VARS[:items] = 2 # default
# Pagy::VARS[:outset] = 0 # default


# Other Variables
# See https://ddnexus.github.io/pagy/api/pagy#other-variables
Pagy::VARS[:size] = [1,2,2,1] # default
Pagy::VARS[:page_param] = :seite # default
# Pagy::VARS[:params] = {} # default
# Pagy::VARS[:fragment] = '#fragment' # example
# Pagy::VARS[:link_extra] = 'data-remote="true"' # example
# Pagy::VARS[:i18n_key] = 'pagy.item_name' # default
Pagy::VARS[:cycle] = true # example


# Extras
# See https://ddnexus.github.io/pagy/extras


# Backend Extras

# Array extra: Paginate arrays efficiently, avoiding expensive array-wrapping and without overriding
# See https://ddnexus.github.io/pagy/extras/array
# require 'pagy/extras/array'

# Countless extra: Paginate without any count, saving one query per rendering
# See https://ddnexus.github.io/pagy/extras/countless
# require 'pagy/extras/countless'

# Elasticsearch Rails extra: Paginate `ElasticsearchRails::Results` objects
# See https://ddnexus.github.io/pagy/extras/elasticsearch_rails
# default :pagy_search method: change only if you use
# also the searchkick extra that defines the same
# VARS[:elasticsearch_rails_search_method] = :pagy_search
# require 'pagy/extras/elasticsearch_rails'

# Searchkick extra: Paginate `Searchkick::Results` objects
# See https://ddnexus.github.io/pagy/extras/searchkick
# default :pagy_search method: change only if you use
# also the elasticsearch_rails extra that defines the same
# VARS[:searchkick_search_method] = :pagy_search
# require 'pagy/extras/searchkick'

# Frontend Extras

# Bootstrap extra: Add nav, nav_js and combo_nav_js helpers and templates for Bootstrap pagination
# See https://ddnexus.github.io/pagy/extras/bootstrap
require 'pagy/extras/bootstrap'

# Bulma extra: Add nav, nav_js and combo_nav_js helpers and templates for Bulma pagination
# See https://ddnexus.github.io/pagy/extras/bulma
# require 'pagy/extras/bulma'

# Foundation extra: Add nav, nav_js and combo_nav_js helpers and templates for Foundation pagination
# See https://ddnexus.github.io/pagy/extras/foundation
# require 'pagy/extras/foundation'

# Materialize extra: Add nav, nav_js and combo_nav_js helpers for Materialize pagination
# See https://ddnexus.github.io/pagy/extras/materialize
# require 'pagy/extras/materialize'

# Navs extra: Add nav_js and combo_nav_js javascript helpers
# Notice: the other frontend extras add their own framework-styled versions,
# so require this extra only if you need the unstyled version
# See https://ddnexus.github.io/pagy/extras/navs
# require 'pagy/extras/navs'

# Semantic extra: Add nav, nav_js and combo_nav_js helpers for Semantic UI pagination
# See https://ddnexus.github.io/pagy/extras/semantic
# require 'pagy/extras/semantic'

# UIkit extra: Add nav helper and templates for UIkit pagination
# See https://ddnexus.github.io/pagy/extras/uikit
# require 'pagy/extras/uikit'

# Multi size var used by the *_nav_js helpers
# See https://ddnexus.github.io/pagy/extras/navs#steps
# Pagy::VARS[:steps] = { 0 => [2,3,3,2], 540 => [3,5,5,3], 720 => [5,7,7,5] } # example


# Feature Extras

# Headers extra: http response headers (and other helpers) useful for API pagination
# See http://ddnexus.github.io/pagy/extras/headers
# require 'pagy/extras/headers'
# Pagy::VARS[:headers] = { page: 'Current-Page', items: 'Page-Items', count: 'Total-Count', pages: 'Total-Pages' } # default

# Support extra: Extra support for features like: incremental, infinite, auto-scroll pagination
# See https://ddnexus.github.io/pagy/extras/support
# require 'pagy/extras/support'

# Items extra: Allow the client to request a custom number of items per page with an optional selector UI
# See https://ddnexus.github.io/pagy/extras/items
require 'pagy/extras/items'
Pagy::VARS[:items_param] = :items # default
Pagy::VARS[:max_items] = 100 # default
# set to false if you want to make :enable_items_extra an opt-in variable
# Pagy::VARS[:enable_items_extra] = false # default true

# Overflow extra: Allow for easy handling of overflowing pages
# See https://ddnexus.github.io/pagy/extras/overflow
require 'pagy/extras/overflow'
Pagy::VARS[:overflow] = :last_page # default (other options: :empty_page and :exception)

# Metadata extra: Provides the pagination metadata to Javascript frameworks like Vue.js, react.js, etc.
# See https://ddnexus.github.io/pagy/extras/metadata
# you must require the shared internal extra (BEFORE the metadata extra) ONLY if you need also the :sequels
# require 'pagy/extras/shared'
# require 'pagy/extras/metadata'
# For performance reason, you should explicitly set ONLY the metadata you use in the frontend
# Pagy::VARS[:metadata] = [:scaffold_url, :count, :page, :prev, :next, :last] # example

# Trim extra: Remove the page=1 param from links
# See https://ddnexus.github.io/pagy/extras/trim
# require 'pagy/extras/trim'
# after requiring it will trim by default
# set to false if you want to make :enable_trim_extra an opt-in variable
# Pagy::VARS[:enable_trim_extra] = false # default true


# Rails

# Rails: extras assets path required by the helpers that use javascript
# (pagy*_nav_js, pagy*_combo_nav_js, and pagy_items_selector_js)
# See https://ddnexus.github.io/pagy/extras#javascript
# Rails.application.config.assets.paths << Pagy.root.join('javascripts')


# I18n

# Pagy internal I18n: ~18x faster using ~10x less memory than the i18n gem
# See https://ddnexus.github.io/pagy/api/frontend#i18n
# Notice: No need to configure anything in this section if your app uses only "en"
# or if you use the i18n extra below
#
# Examples:
# load the "de" built-in locale:
Pagy::I18n.load(locale: 'de')
#
# load the "de" locale defined in the custom file at :filepath:
# Pagy::I18n.load(locale: 'de', filepath: 'path/to/pagy-de.yml')
#
# load the "de", "en" and "es" built-in locales:
# (the first passed :locale will be used also as the default_locale)
# Pagy::I18n.load({locale: 'de'},
# {locale: 'en'},
# {locale: 'es'})
#
# load the "en" built-in locale, a custom "es" locale,
# and a totally custom locale complete with a custom :pluralize proc:
# (the first passed :locale will be used also as the default_locale)
# Pagy::I18n.load({locale: 'en'},
# {locale: 'es', filepath: 'path/to/pagy-es.yml'},
# {locale: 'xyz', # not built-in
# filepath: 'path/to/pagy-xyz.yml',
# pluralize: lambda{|count| ... } )


# I18n extra: uses the standard i18n gem which is ~18x slower using ~10x more memory
# than the default pagy internal i18n (see above)
# See https://ddnexus.github.io/pagy/extras/i18n
# require 'pagy/extras/i18n'

# Default i18n key
# Pagy::VARS[:i18n_key] = 'pagy.item_name' # default
2 changes: 2 additions & 0 deletions package.json
Expand Up @@ -2,10 +2,12 @@
"name": "howto-acts-as-votable",
"private": true,
"dependencies": {
"@popperjs/core": "^2.9.2",
"@rails/actioncable": "^6.0.0",
"@rails/activestorage": "^6.0.0",
"@rails/ujs": "^6.0.0",
"@rails/webpacker": "5.2.1",
"bootstrap": "^5.0.0-beta3",
"turbolinks": "^5.2.0"
},
"version": "0.1.0",
Expand Down
10 changes: 10 additions & 0 deletions yarn.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 266eba0

Please sign in to comment.