kaminari-core 1.1.1 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e8c36b983453967adcb35acf8e5a07c87fdc811c9d285428a599ec2ced09064e
4
- data.tar.gz: 1309e2966e772d9410a1fd9c02bc09bb51f6c46d0a73316b3332597c5f2675bc
3
+ metadata.gz: 38b5e5dc2c53e8e1194787c1d7767b4f68a2f74ea42125b9be84a52b14c47576
4
+ data.tar.gz: 0d515874f25e93549891b1d633fb34159075ec32148e93e289b47fb24e45a81a
5
5
  SHA512:
6
- metadata.gz: aeb83e6fa8f491923a819512390353f2de9193f986bcdecf9f9ec4f4c1f5b4a8924a0561654dd24b020b076168651f2294e1008794c46d22b80b31320255a5be
7
- data.tar.gz: e97a0d7f44ae639a019afcde742caa0219c37c7867a905763ea451964a6e6e4be2b946c2262cf62127c6a80cc621be8c717853b9b2aa4e6b65f97e3f573e872b
6
+ metadata.gz: c2a5687801a8e2b4ae370b206b8d6df3a488fd920f9592a66946c5069b2d90ef72b6f7970517fdc639224e4412b1e4e78cf8da239a484d3452fd62df77b65009
7
+ data.tar.gz: 8f6e7fad6773b7669002c5df184439b193bc0021cb212a1492fca7adb5735ec92df0c126d2fa3aee50dce82b2ca1ade0bbbf65bf4ede0603cd497f6df456f78c
@@ -1,5 +1,5 @@
1
- # coding: utf-8
2
1
  # frozen_string_literal: true
2
+
3
3
  lib = File.expand_path('../lib', __FILE__)
4
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
5
  require 'kaminari/core/version'
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Kaminari
3
4
  module Generators
4
5
  # rails g kaminari:config
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  Kaminari.configure do |config|
3
4
  # config.default_per_page = 25
4
5
  # config.max_per_page = nil
@@ -8,5 +9,6 @@ Kaminari.configure do |config|
8
9
  # config.right = 0
9
10
  # config.page_method_name = :page
10
11
  # config.param_name = :page
12
+ # config.max_pages = nil
11
13
  # config.params_on_first_page = false
12
14
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Kaminari
3
4
  module Generators
4
5
  # rails g kaminari:views THEME
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Kaminari
3
4
  end
4
5
 
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Kaminari
3
4
  module Core
4
- VERSION = '1.1.1'
5
+ VERSION = '1.2.0'
5
6
  end
6
7
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Kaminari #:nodoc:
3
4
  class Engine < ::Rails::Engine #:nodoc:
4
5
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Kaminari
3
4
  class ZeroPerPageOperation < ZeroDivisionError; end
4
5
  end
@@ -2,7 +2,97 @@
2
2
 
3
3
  module Kaminari
4
4
  module Helpers
5
+
6
+ # The Kaminari::Helpers::UrlHelper module provides useful methods for
7
+ # generating a path or url to a particlar page. A class must implement the
8
+ # following methods:
9
+ #
10
+ # * <tt>url_for</tt>: A method that generates an actual path
11
+ # * <tt>params</tt>: A method that returns query string parameters
12
+ # * <tt>request</tt>: A method that returns a Rack::Request object
13
+ #
14
+ # A normal Rails controller implements all the methods, which makes it
15
+ # trivial to use this module:
16
+ #
17
+ # ==== Examples
18
+ #
19
+ # class UsersController < ApplicationController
20
+ # include Kaminari::Helpers::UrlHelper
21
+ #
22
+ # def index
23
+ # @users = User.page(1)
24
+ #
25
+ # path_to_next_page(@items)
26
+ # # => /items?page=2
27
+ # end
28
+ # end
29
+ #
30
+ module UrlHelper
31
+
32
+ # A helper that calculates the url to the next page.
33
+ #
34
+ # ==== Examples
35
+ # Basic usage:
36
+ #
37
+ # <%= next_page_url @items %>
38
+ # #-> http://www.example.org/items?page=2
39
+ #
40
+ # It will return `nil` if there is no next page.
41
+ def next_page_url(scope, options = {})
42
+ "#{request.base_url}#{next_page_path(scope, options)}" if scope.next_page
43
+ end
44
+ alias path_to_next_url next_page_url
45
+
46
+ # A helper that calculates the url to the previous page.
47
+ #
48
+ # ==== Examples
49
+ # Basic usage:
50
+ #
51
+ # <%= prev_page_url @items %>
52
+ # #-> http://www.example.org/items
53
+ #
54
+ # It will return `nil` if there is no previous page.
55
+ def prev_page_url(scope, options = {})
56
+ "#{request.base_url}#{prev_page_path(scope, options)}" if scope.prev_page
57
+ end
58
+ alias previous_page_url prev_page_url
59
+ alias url_to_prev_page prev_page_url
60
+ alias url_to_previous_page prev_page_url
61
+
62
+ # A helper that calculates the path to the next page.
63
+ #
64
+ # ==== Examples
65
+ # Basic usage:
66
+ #
67
+ # <%= path_to_next_page @items %>
68
+ # #-> /items?page=2
69
+ #
70
+ # It will return `nil` if there is no next page.
71
+ def next_page_path(scope, options = {})
72
+ Kaminari::Helpers::NextPage.new(self, **options.reverse_merge(current_page: scope.current_page)).url if scope.next_page
73
+ end
74
+ alias path_to_next_page next_page_path
75
+
76
+ # A helper that calculates the path to the previous page.
77
+ #
78
+ # ==== Examples
79
+ # Basic usage:
80
+ #
81
+ # <%= path_to_prev_page @items %>
82
+ # #-> /items
83
+ #
84
+ # It will return `nil` if there is no previous page.
85
+ def prev_page_path(scope, options = {})
86
+ Kaminari::Helpers::PrevPage.new(self, **options.reverse_merge(current_page: scope.current_page)).url if scope.prev_page
87
+ end
88
+ alias previous_page_path prev_page_path
89
+ alias path_to_previous_page prev_page_path
90
+ alias path_to_prev_page prev_page_path
91
+ end
92
+
5
93
  module HelperMethods
94
+ include UrlHelper
95
+
6
96
  # A helper that renders the pagination links.
7
97
  #
8
98
  # <%= paginate @articles %>
@@ -22,7 +112,7 @@ module Kaminari
22
112
  options[:total_pages] ||= scope.total_pages
23
113
  options.reverse_merge! current_page: scope.current_page, per_page: scope.limit_value, remote: false
24
114
 
25
- paginator = paginator_class.new (template || self), options
115
+ paginator = paginator_class.new (template || self), **options
26
116
  paginator.to_s
27
117
  end
28
118
 
@@ -49,8 +139,10 @@ module Kaminari
49
139
  options.except! :params, :param_name
50
140
  options[:rel] ||= 'prev'
51
141
 
52
- link_to_if prev_page, name, prev_page, options do
53
- yield if block_given?
142
+ if prev_page
143
+ link_to name, prev_page, options
144
+ elsif block_given?
145
+ yield
54
146
  end
55
147
  end
56
148
  alias link_to_prev_page link_to_previous_page
@@ -78,8 +170,10 @@ module Kaminari
78
170
  options.except! :params, :param_name
79
171
  options[:rel] ||= 'next'
80
172
 
81
- link_to_if next_page, name, next_page, options do
82
- yield if block_given?
173
+ if next_page
174
+ link_to name, next_page, options
175
+ elsif block_given?
176
+ yield
83
177
  end
84
178
  end
85
179
 
@@ -109,7 +203,10 @@ module Kaminari
109
203
  if collection.total_pages < 2
110
204
  t('helpers.page_entries_info.one_page.display_entries', entry_name: entry_name, count: collection.total_count)
111
205
  else
112
- t('helpers.page_entries_info.more_pages.display_entries', entry_name: entry_name, first: collection.offset_value + 1, last: [collection.offset_value + collection.limit_value, collection.total_count].min, total: collection.total_count)
206
+ from = collection.offset_value + 1
207
+ to = collection.offset_value + (collection.respond_to?(:records) ? collection.records : collection.to_a).size
208
+
209
+ t('helpers.page_entries_info.more_pages.display_entries', entry_name: entry_name, first: from, last: to, total: collection.total_count)
113
210
  end.html_safe
114
211
  end
115
212
 
@@ -136,36 +233,10 @@ module Kaminari
136
233
  prev_page = path_to_prev_page(scope, options)
137
234
 
138
235
  output = String.new
139
- output << tag(:link, rel: "next", href: next_page) if next_page
140
- output << tag(:link, rel: "prev", href: prev_page) if prev_page
236
+ output << %Q|<link rel="next" href="#{next_page}"></link>| if next_page
237
+ output << %Q|<link rel="prev" href="#{prev_page}"></link>| if prev_page
141
238
  output.html_safe
142
239
  end
143
-
144
- # A helper that calculates the path to the next page.
145
- #
146
- # ==== Examples
147
- # Basic usage:
148
- #
149
- # <%= path_to_next_page @items %>
150
- # #-> /items?page=2
151
- #
152
- # It will return `nil` if there is no next page.
153
- def path_to_next_page(scope, options = {})
154
- Kaminari::Helpers::NextPage.new(self, options.reverse_merge(current_page: scope.current_page)).url if scope.next_page
155
- end
156
-
157
- # A helper that calculates the path to the previous page.
158
- #
159
- # ==== Examples
160
- # Basic usage:
161
- #
162
- # <%= path_to_prev_page @items %>
163
- # #-> /items
164
- #
165
- # It will return `nil` if there is no previous page.
166
- def path_to_prev_page(scope, options = {})
167
- Kaminari::Helpers::PrevPage.new(self, options.reverse_merge(current_page: scope.current_page)).url if scope.prev_page
168
- end
169
240
  end
170
241
  end
171
242
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'active_support/inflector'
3
4
  require 'kaminari/helpers/tags'
4
5
 
@@ -26,7 +27,11 @@ module Kaminari
26
27
  # render given block as a view template
27
28
  def render(&block)
28
29
  instance_eval(&block) if @options[:total_pages] > 1
29
- @output_buffer
30
+
31
+ # This allows for showing fall-back HTML when there's only one page:
32
+ #
33
+ # <%= paginate(@search_results) || "Showing all search results" %>
34
+ @output_buffer.presence
30
35
  end
31
36
 
32
37
  # enumerate each page providing PageProxy object as the block parameter
@@ -54,13 +59,13 @@ module Kaminari
54
59
  private :relevant_pages
55
60
 
56
61
  def page_tag(page)
57
- @last = Page.new @template, @options.merge(page: page)
62
+ @last = Page.new @template, **@options.merge(page: page)
58
63
  end
59
64
 
60
65
  %w[first_page prev_page next_page last_page gap].each do |tag|
61
66
  eval <<-DEF, nil, __FILE__, __LINE__ + 1
62
67
  def #{tag}_tag
63
- @last = #{tag.classify}.new @template, @options
68
+ @last = #{tag.classify}.new @template, **@options
64
69
  end
65
70
  DEF
66
71
  end
@@ -1,7 +1,8 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Kaminari
3
4
  module Helpers
4
- PARAM_KEY_BLACKLIST = [:authenticity_token, :commit, :utf8, :_method, :script_name].freeze
5
+ PARAM_KEY_EXCEPT_LIST = [:authenticity_token, :commit, :utf8, :_method, :script_name].freeze
5
6
 
6
7
  # A tag stands for an HTML tag inside the paginator.
7
8
  # Basically, a tag has its own partial template file, so every tag can be
@@ -23,7 +24,7 @@ module Kaminari
23
24
  # @params in Rails 5 no longer inherits from Hash
24
25
  @params = @params.to_unsafe_h if @params.respond_to?(:to_unsafe_h)
25
26
  @params = @params.with_indifferent_access
26
- @params.except!(*PARAM_KEY_BLACKLIST)
27
+ @params.except!(*PARAM_KEY_EXCEPT_LIST)
27
28
  @params.merge! params
28
29
  end
29
30
 
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'active_support/core_ext/module'
3
4
  module Kaminari
4
5
  # Kind of Array that can paginate
@@ -34,7 +35,7 @@ module Kaminari
34
35
 
35
36
  # Used for page_entry_info
36
37
  def entry_name(options = {})
37
- I18n.t('helpers.page_entries_info.entry', options.reverse_merge(default: ENTRY.pluralize(options[:count])))
38
+ I18n.t('helpers.page_entries_info.entry', **options.reverse_merge(default: ENTRY.pluralize(options[:count])))
38
39
  end
39
40
 
40
41
  # items at the specified "page"
@@ -1,10 +1,10 @@
1
1
  # frozen_string_literal: true
2
+
3
+ require 'active_support/concern'
4
+
2
5
  module Kaminari
3
6
  module ConfigurationMethods #:nodoc:
4
- def self.included(base)
5
- base.extend ClassMethods
6
- end
7
-
7
+ extend ActiveSupport::Concern
8
8
  module ClassMethods #:nodoc:
9
9
  # Overrides the default +per_page+ value per model
10
10
  # class Article < ActiveRecord::Base
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Kaminari
3
4
  module PageScopeMethods
4
5
  # Specify the <tt>per_page</tt> value for the preceding <tt>page</tt> scope
@@ -19,7 +20,8 @@ module Kaminari
19
20
 
20
21
  def max_paginates_per(new_max_per_page)
21
22
  @_max_per_page = new_max_per_page
22
- per current_per_page, max_per_page: new_max_per_page
23
+
24
+ per (defined?(@_per) && @_per) || default_per_page, max_per_page: new_max_per_page
23
25
  end
24
26
 
25
27
  def padding(num)
@@ -54,7 +56,11 @@ module Kaminari
54
56
 
55
57
  # Current per-page number
56
58
  def current_per_page
57
- (defined?(@_per) && @_per) || default_per_page
59
+ ActiveSupport::Deprecation.warn '#current_per_page is deprecated and will be removed in the next major ' \
60
+ 'version. Please use #limit_value instead.'
61
+
62
+ limit_value
63
+ # (defined?(@_per) && @_per) || default_per_page
58
64
  end
59
65
 
60
66
  # Next page number in the collection
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Kaminari
3
4
  class Railtie < ::Rails::Railtie #:nodoc:
4
5
  # Doesn't actually do anything. Just keeping this hook point, mainly for compatibility
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kaminari-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.1
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Akira Matsuda
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-10-21 00:00:00.000000000 Z
11
+ date: 2020-01-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -106,8 +106,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
106
106
  - !ruby/object:Gem::Version
107
107
  version: '0'
108
108
  requirements: []
109
- rubyforge_project:
110
- rubygems_version: 2.6.14
109
+ rubygems_version: 3.1.2
111
110
  signing_key:
112
111
  specification_version: 4
113
112
  summary: Kaminari's core pagination library