kaminari-activerecord 1.1.0 → 1.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/kaminari-activerecord.gemspec +1 -1
- data/lib/kaminari/activerecord/active_record_extension.rb +1 -0
- data/lib/kaminari/activerecord/active_record_model_extension.rb +1 -0
- data/lib/kaminari/activerecord/active_record_relation_methods.rb +44 -14
- data/lib/kaminari/activerecord/version.rb +2 -1
- data/lib/kaminari/activerecord.rb +1 -0
- metadata +8 -9
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: e02b1d73471d5966fc0a51c928644d0f47318e6de292267cecfc6742983c24dc
|
|
4
|
+
data.tar.gz: 77dfa6a9124df355c7b3ac038f5c8db374ee0769f58d22ebb9db48b448fe5b00
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: f5cc9d8c8ee50631d2086ac46b50f9b4acd2cb7860a750089de6665578465d1130f0dbcae116c904d8646dc4daae36ffe87d9a71aadcfb8171d76267802fae99
|
|
7
|
+
data.tar.gz: 6ec4e5f73926f62ae1a8ce0ccca455932336147cef42203be1ffd821199317fed96f87a76ec8d3277b2a2e1c5c4cb48dc0b7f5e8703d273b03d269d0de59f8e1
|
|
@@ -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
|
-
|
|
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
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
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,37 @@ 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 hold `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.class.name
|
|
68
|
+
when 'Integer', 'Fixnum'
|
|
69
|
+
@arel.limit = new_limit
|
|
70
|
+
when 'ActiveModel::Attribute::WithCastValue' # comparing by class name because ActiveModel::Attribute::WithCastValue is a private constant
|
|
71
|
+
@arel.limit = build_cast_value 'LIMIT', new_limit
|
|
72
|
+
when 'Arel::Nodes::BindParam'
|
|
73
|
+
if @arel.limit.respond_to?(:value)
|
|
74
|
+
@arel.limit = Arel::Nodes::BindParam.new(@arel.limit.value.with_cast_value(new_limit))
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
# NOTE: ending all modules and reopening again because using has to be called from the toplevel in Ruby 2.0
|
|
84
|
+
using Kaminari::PaginatableWithoutCount::LimitValueSetter
|
|
85
|
+
|
|
86
|
+
module Kaminari
|
|
53
87
|
module PaginatableWithoutCount
|
|
54
88
|
# Overwrite AR::Relation#load to actually load one more record to judge if the page has next page
|
|
55
89
|
# then store the result in @_has_next ivar
|
|
@@ -57,13 +91,9 @@ module Kaminari
|
|
|
57
91
|
if loaded? || limit_value.nil?
|
|
58
92
|
super
|
|
59
93
|
else
|
|
60
|
-
|
|
61
|
-
# FIXME: this could be removed when we're dropping AR 4 support
|
|
62
|
-
@arel.limit = @values[:limit] if @arel && (Integer === @arel.limit)
|
|
94
|
+
set_limit_value limit_value + 1
|
|
63
95
|
super
|
|
64
|
-
|
|
65
|
-
# FIXME: this could be removed when we're dropping AR 4 support
|
|
66
|
-
@arel.limit = @values[:limit] if @arel && (Integer === @arel.limit)
|
|
96
|
+
set_limit_value limit_value - 1
|
|
67
97
|
|
|
68
98
|
if @records.any?
|
|
69
99
|
@records = @records.dup if (frozen = @records.frozen?)
|
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.
|
|
4
|
+
version: 1.2.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Akira Matsuda
|
|
8
|
-
autorequire:
|
|
8
|
+
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2021-12-25 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.
|
|
19
|
+
version: 1.2.2
|
|
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.
|
|
26
|
+
version: 1.2.2
|
|
27
27
|
- !ruby/object:Gem::Dependency
|
|
28
28
|
name: activerecord
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -86,7 +86,7 @@ homepage: https://github.com/kaminari/kaminari
|
|
|
86
86
|
licenses:
|
|
87
87
|
- MIT
|
|
88
88
|
metadata: {}
|
|
89
|
-
post_install_message:
|
|
89
|
+
post_install_message:
|
|
90
90
|
rdoc_options: []
|
|
91
91
|
require_paths:
|
|
92
92
|
- lib
|
|
@@ -101,9 +101,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
101
101
|
- !ruby/object:Gem::Version
|
|
102
102
|
version: '0'
|
|
103
103
|
requirements: []
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
signing_key:
|
|
104
|
+
rubygems_version: 3.3.0.dev
|
|
105
|
+
signing_key:
|
|
107
106
|
specification_version: 4
|
|
108
107
|
summary: Kaminari Active Record adapter
|
|
109
108
|
test_files: []
|