kaminari-activerecord 1.1.1 → 1.2.1

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: a9a6578e9af2cd73cd987f013310cc7db6f338af3996cc9f8033279bb80fe37f
4
- data.tar.gz: 26f8663b6b30ef6a4cae8529e86a9e394d4dec9936e7518ea0dcc971a29c15cd
3
+ metadata.gz: 6876071aa2d14ad868c0b30fe2d47478c6237c8d2e32f5e09ff2d6406d308f8c
4
+ data.tar.gz: 9ab1589acaec71a5ad35eeb9f80b38d7d6abcfd4f9ee83a468ab9686e8bcb2e1
5
5
  SHA512:
6
- metadata.gz: 6d72db40c4816e6a57074b39a0118a5586bb3a5c39c40dfecef53a61b9ad83cdf380cd2a249f1305d73ff1c3c3f77d744d4f6fd5cc71858793a9f5b34c923d8a
7
- data.tar.gz: 3e8de5ead4b7627e8d6a803f0cff8c3608f4c37422cc33db36aebed5dc23d30d340ef09c1f3d19f9a2f60b30981194fe1b1ee1600c91f2267ea419371a20c726
6
+ metadata.gz: dc82c0b5e7aa6292bdbe94474b1a7c532706a6d07886a7a44134e49d593102d21a052a29cbd8edf187b7b1a0e736a1638bdd92fcfa7fe3bc4a6b54b2fb73599f
7
+ data.tar.gz: 7c6904976fdc124170c8b01294dacca2433e86895f60f7a1cabfccfd780cfac2f59263cd1777dc70cbf74e745939174b5ee29eee7df20909eca537b45172e001
@@ -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/activerecord/version'
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require "kaminari/activerecord/version"
3
4
  require 'active_support/lazy_load_hooks'
4
5
 
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'kaminari/activerecord/active_record_model_extension'
3
4
 
4
5
  module Kaminari
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'kaminari/activerecord/active_record_relation_methods'
3
4
 
4
5
  module Kaminari
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Kaminari
3
4
  # Active Record specific page scope methods implementations
4
5
  module ActiveRecordRelationMethods
@@ -21,23 +22,25 @@ module Kaminari
21
22
  # Total count has to be 0 if loaded records are 0
22
23
  return @total_count = 0 if (current_page == 1) && @records.empty?
23
24
  # Total count is calculable at the last page
24
- per_page = (defined?(@_per) && @_per) || default_per_page
25
- return @total_count = (current_page - 1) * per_page + @records.length if @records.any? && (@records.length < per_page)
25
+ return @total_count = (current_page - 1) * limit_value + @records.length if @records.any? && (@records.length < limit_value)
26
26
  end
27
27
 
28
28
  # #count overrides the #select which could include generated columns referenced in #order, so skip #order here, where it's irrelevant to the result anyway
29
29
  c = except(:offset, :limit, :order)
30
30
  # Remove includes only if they are irrelevant
31
31
  c = c.except(:includes) unless references_eager_loaded_tables?
32
+
33
+ c = c.limit(max_pages * limit_value) if max_pages && max_pages.respond_to?(:*)
34
+
32
35
  # .group returns an OrderedHash that responds to #count
33
36
  c = c.count(column_name)
34
37
  @total_count = if c.is_a?(Hash) || c.is_a?(ActiveSupport::OrderedHash)
35
- c.count
36
- elsif c.respond_to? :count
37
- c.count(column_name)
38
- else
39
- c
40
- end
38
+ c.count
39
+ elsif c.respond_to? :count
40
+ c.count(column_name)
41
+ else
42
+ c
43
+ end
41
44
  end
42
45
 
43
46
  # Turn this Relation to a "without count mode" Relation.
@@ -50,6 +53,35 @@ module Kaminari
50
53
  end
51
54
 
52
55
  # A module that makes AR::Relation paginatable without having to cast another SELECT COUNT query
56
+ module PaginatableWithoutCount
57
+ module LimitValueSetter
58
+ # refine PaginatableWithoutCount do # NOTE: this doesn't work in Ruby < 2.4
59
+ refine ::ActiveRecord::Relation do
60
+ private
61
+
62
+ # Update multiple instance variables that holds `limit` to a given value
63
+ def set_limit_value(new_limit)
64
+ @values[:limit] = new_limit
65
+
66
+ if @arel
67
+ case @arel.limit
68
+ when Integer
69
+ @arel.limit = new_limit
70
+ when Arel::Nodes::BindParam
71
+ if @arel.limit.respond_to?(:value)
72
+ @arel.limit = Arel::Nodes::BindParam.new(@arel.limit.value.with_cast_value(new_limit))
73
+ end
74
+ end
75
+ end
76
+ end
77
+ end
78
+ end
79
+ end
80
+ end
81
+ # NOTE: ending all modules and reopening again because using has to be called from the toplevel in Ruby 2.0
82
+ using Kaminari::PaginatableWithoutCount::LimitValueSetter
83
+
84
+ module Kaminari
53
85
  module PaginatableWithoutCount
54
86
  # Overwrite AR::Relation#load to actually load one more record to judge if the page has next page
55
87
  # then store the result in @_has_next ivar
@@ -57,13 +89,9 @@ module Kaminari
57
89
  if loaded? || limit_value.nil?
58
90
  super
59
91
  else
60
- @values[:limit] = limit_value + 1
61
- # FIXME: this could be removed when we're dropping AR 4 support
62
- @arel.limit = @values[:limit] if @arel && (Integer === @arel.limit)
92
+ set_limit_value limit_value + 1
63
93
  super
64
- @values[:limit] = limit_value - 1
65
- # FIXME: this could be removed when we're dropping AR 4 support
66
- @arel.limit = @values[:limit] if @arel && (Integer === @arel.limit)
94
+ set_limit_value limit_value - 1
67
95
 
68
96
  if @records.any?
69
97
  @records = @records.dup if (frozen = @records.frozen?)
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Kaminari
3
4
  module Activerecord
4
- VERSION = '1.1.1'
5
+ VERSION = '1.2.1'
5
6
  end
6
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kaminari-activerecord
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.1
4
+ version: 1.2.1
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-05-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: kaminari-core
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 1.1.1
19
+ version: 1.2.1
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - '='
25
25
  - !ruby/object:Gem::Version
26
- version: 1.1.1
26
+ version: 1.2.1
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: activerecord
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -101,8 +101,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
101
101
  - !ruby/object:Gem::Version
102
102
  version: '0'
103
103
  requirements: []
104
- rubyforge_project:
105
- rubygems_version: 2.6.14
104
+ rubygems_version: 3.2.0.pre1
106
105
  signing_key:
107
106
  specification_version: 4
108
107
  summary: Kaminari Active Record adapter