acts_as_ranked_list 0.2.2 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +12 -0
- data/README.md +5 -4
- data/acts_as_ranked_list.gemspec +9 -9
- data/lib/acts_as_ranked_list/active_record/rank_column.rb +14 -2
- data/lib/acts_as_ranked_list/version.rb +1 -1
- metadata +21 -27
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3c665111b3d1da9b578d19b1c49203ae597e49a06e09f274e92cb7cecca03687
|
4
|
+
data.tar.gz: d4d682b766b048afcc9af37fabcb99e37e683a2d0924e32a2d4a3941a6c29f36
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cf228e285474e6ffdee7aeeb36c5a024ee897a640a8f9dbc486faf4e7b8fd431e2c11907137e1f15fec253e0ee4ec38e7b73cedf2883690b1482261032a9cd87
|
7
|
+
data.tar.gz: 922b5ad1fa695325e779a3a44db204b3457a84d0b5bcec539cb16c492c48abe3c82a92acf978984aa3d758846fc532fe1f9c829c41eed9fe4f764f6852414afa
|
data/CHANGELOG.md
CHANGED
@@ -7,6 +7,18 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
|
|
7
7
|
|
8
8
|
## [Unreleased]
|
9
9
|
|
10
|
+
## [0.4.0] - 2024-02-12
|
11
|
+
|
12
|
+
- Fixes sporadic bug on postgres with `pluck` higher items.
|
13
|
+
|
14
|
+
## [0.3.0] - 2024-02-11 [YANKED]
|
15
|
+
|
16
|
+
- Fixes individual items updating timestamps even when `touch_on_update` is false.
|
17
|
+
|
18
|
+
## [0.2.3] - 2023-12-31
|
19
|
+
|
20
|
+
- Updates gem dependencies.
|
21
|
+
|
10
22
|
## [0.2.2] - 2023-04-24
|
11
23
|
|
12
24
|
- ~~Allows unranked items in list by having `nil` values.~~ Implicitly allowed behaviour since v0.2.0, also able to add new items can also be added as unranked. Adds documentation to this feature.
|
data/README.md
CHANGED
@@ -258,7 +258,7 @@ You can spread ranks so that the difference between each rank and the next is se
|
|
258
258
|
- Being able to rerank items again without overflowing column's max precision.
|
259
259
|
- Human-readable viewing purposes. This is not recommended. The rank should be human-readable (or not viewable) at the view (presentation) layer.
|
260
260
|
|
261
|
-
If `avoid_collisions = true (by default)`. Then you do not have to use spread ranks manually. If the database raises an overflow error when mutating a rank, then it could be time to recalibrate the ranks in the table. You should handle this case in your code, and spread ranks. This is very infrequent
|
261
|
+
If `avoid_collisions = true (by default)`. Then you do not have to use spread ranks manually. If the database raises an overflow error when mutating a rank, then it could be time to recalibrate the ranks in the table. You should handle this case in your code, and spread ranks. **This is very infrequent.** For example, in postgres this error will be raised when using the default precision of `16_383` digits after the decimal of a `decimal` column type in postgres versions `9.1+`:
|
262
262
|
|
263
263
|
```ruby
|
264
264
|
ActiveRecord::RangeError: PG::NumericValueOutOfRange: ERROR: value overflows numeric format
|
@@ -266,9 +266,10 @@ ActiveRecord::RangeError: PG::NumericValueOutOfRange: ERROR: value overflows nu
|
|
266
266
|
|
267
267
|
Items are spread in, ascending order of each, by:
|
268
268
|
|
269
|
-
1.
|
270
|
-
2.
|
271
|
-
3.
|
269
|
+
1. scopes
|
270
|
+
2. rank
|
271
|
+
3. time updated columns (`updated_at` for example)
|
272
|
+
4. primary key (`id` for example)
|
272
273
|
|
273
274
|
To spread ranks:
|
274
275
|
|
data/acts_as_ranked_list.gemspec
CHANGED
@@ -32,15 +32,15 @@ Gem::Specification.new do |spec|
|
|
32
32
|
spec.require_paths = ["lib"]
|
33
33
|
|
34
34
|
# Uncomment to register a new dependency of your gem
|
35
|
-
spec.add_dependency "rails", "
|
36
|
-
spec.add_dependency "rake", "
|
37
|
-
spec.add_dependency "rspec", "
|
38
|
-
spec.add_dependency "standard", "
|
39
|
-
spec.add_dependency "rspec-rails", "5.1.2"
|
40
|
-
spec.add_development_dependency "byebug", "11.1.3"
|
41
|
-
spec.add_development_dependency "yard", "0.9.34"
|
42
|
-
spec.add_development_dependency "redcarpet", "3.6.0"
|
43
|
-
spec.add_development_dependency "sqlite3", "1.6.2"
|
35
|
+
spec.add_dependency "rails", ">= 6.0.3"
|
36
|
+
spec.add_dependency "rake", ">= 13.0"
|
37
|
+
spec.add_dependency "rspec", ">= 3.0"
|
38
|
+
spec.add_dependency "standard", ">= 1.3"
|
39
|
+
spec.add_dependency "rspec-rails", ">= 5.1.2"
|
40
|
+
spec.add_development_dependency "byebug", ">= 11.1.3"
|
41
|
+
spec.add_development_dependency "yard", ">= 0.9.34"
|
42
|
+
spec.add_development_dependency "redcarpet", ">= 3.6.0"
|
43
|
+
spec.add_development_dependency "sqlite3", ">= 1.6.2"
|
44
44
|
|
45
45
|
# For more information and examples about making a new gem, check out our
|
46
46
|
# guide at: https://bundler.io/guides/creating_gem.html
|
@@ -198,7 +198,9 @@ module ActsAsRankedList #:nodoc:
|
|
198
198
|
|
199
199
|
define_method :set_rank_above do |item|
|
200
200
|
higher_items = get_higher_items(2, "DESC", item.current_rank, true, true)
|
201
|
-
|
201
|
+
# TODO: Why is higher_items and lower_items sometimes need to be converted to array.
|
202
|
+
# Is it related to if items are not found? Otherwise it returns an error
|
203
|
+
padded_array = pad_array(higher_items.to_a.pluck(rank_column), 0)
|
202
204
|
new_rank = padded_array.sum / 2
|
203
205
|
|
204
206
|
with_persistence do
|
@@ -223,7 +225,7 @@ module ActsAsRankedList #:nodoc:
|
|
223
225
|
# new_rank = ::ActiveRecord::Base.connection.execute(sql).to_a.first.values.first
|
224
226
|
|
225
227
|
lower_items = get_lower_items(2, "ASC", item.current_rank, true, true)
|
226
|
-
padded_array = pad_array(lower_items.pluck(rank_column))
|
228
|
+
padded_array = pad_array(lower_items.to_a.pluck(rank_column))
|
227
229
|
new_rank = padded_array.sum / 2
|
228
230
|
|
229
231
|
with_persistence do
|
@@ -312,7 +314,17 @@ module ActsAsRankedList #:nodoc:
|
|
312
314
|
define_method :with_persistence do |items = [self], &blk|
|
313
315
|
blk.call
|
314
316
|
|
317
|
+
item_record_timestamps = items.map do |i|
|
318
|
+
i.record_timestamps?
|
319
|
+
end
|
320
|
+
|
321
|
+
items.each { |i| i.record_timestamps = touch_on_update }
|
322
|
+
|
315
323
|
items.each(&:save!) unless skip_persistence?
|
324
|
+
|
325
|
+
items.each_with_index do |i, idx|
|
326
|
+
i.record_timestamps = item_record_timestamps[idx]
|
327
|
+
end
|
316
328
|
end
|
317
329
|
|
318
330
|
define_method :pad_array do |array, value = nil, size = 2|
|
metadata
CHANGED
@@ -1,145 +1,139 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: acts_as_ranked_list
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Farbafe
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-02-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "~>"
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: 6.0.3
|
20
17
|
- - ">="
|
21
18
|
- !ruby/object:Gem::Version
|
22
|
-
version: 6.0.3
|
19
|
+
version: 6.0.3
|
23
20
|
type: :runtime
|
24
21
|
prerelease: false
|
25
22
|
version_requirements: !ruby/object:Gem::Requirement
|
26
23
|
requirements:
|
27
|
-
- - "~>"
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
version: 6.0.3
|
30
24
|
- - ">="
|
31
25
|
- !ruby/object:Gem::Version
|
32
|
-
version: 6.0.3
|
26
|
+
version: 6.0.3
|
33
27
|
- !ruby/object:Gem::Dependency
|
34
28
|
name: rake
|
35
29
|
requirement: !ruby/object:Gem::Requirement
|
36
30
|
requirements:
|
37
|
-
- - "
|
31
|
+
- - ">="
|
38
32
|
- !ruby/object:Gem::Version
|
39
33
|
version: '13.0'
|
40
34
|
type: :runtime
|
41
35
|
prerelease: false
|
42
36
|
version_requirements: !ruby/object:Gem::Requirement
|
43
37
|
requirements:
|
44
|
-
- - "
|
38
|
+
- - ">="
|
45
39
|
- !ruby/object:Gem::Version
|
46
40
|
version: '13.0'
|
47
41
|
- !ruby/object:Gem::Dependency
|
48
42
|
name: rspec
|
49
43
|
requirement: !ruby/object:Gem::Requirement
|
50
44
|
requirements:
|
51
|
-
- - "
|
45
|
+
- - ">="
|
52
46
|
- !ruby/object:Gem::Version
|
53
47
|
version: '3.0'
|
54
48
|
type: :runtime
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
51
|
requirements:
|
58
|
-
- - "
|
52
|
+
- - ">="
|
59
53
|
- !ruby/object:Gem::Version
|
60
54
|
version: '3.0'
|
61
55
|
- !ruby/object:Gem::Dependency
|
62
56
|
name: standard
|
63
57
|
requirement: !ruby/object:Gem::Requirement
|
64
58
|
requirements:
|
65
|
-
- - "
|
59
|
+
- - ">="
|
66
60
|
- !ruby/object:Gem::Version
|
67
61
|
version: '1.3'
|
68
62
|
type: :runtime
|
69
63
|
prerelease: false
|
70
64
|
version_requirements: !ruby/object:Gem::Requirement
|
71
65
|
requirements:
|
72
|
-
- - "
|
66
|
+
- - ">="
|
73
67
|
- !ruby/object:Gem::Version
|
74
68
|
version: '1.3'
|
75
69
|
- !ruby/object:Gem::Dependency
|
76
70
|
name: rspec-rails
|
77
71
|
requirement: !ruby/object:Gem::Requirement
|
78
72
|
requirements:
|
79
|
-
- -
|
73
|
+
- - ">="
|
80
74
|
- !ruby/object:Gem::Version
|
81
75
|
version: 5.1.2
|
82
76
|
type: :runtime
|
83
77
|
prerelease: false
|
84
78
|
version_requirements: !ruby/object:Gem::Requirement
|
85
79
|
requirements:
|
86
|
-
- -
|
80
|
+
- - ">="
|
87
81
|
- !ruby/object:Gem::Version
|
88
82
|
version: 5.1.2
|
89
83
|
- !ruby/object:Gem::Dependency
|
90
84
|
name: byebug
|
91
85
|
requirement: !ruby/object:Gem::Requirement
|
92
86
|
requirements:
|
93
|
-
- -
|
87
|
+
- - ">="
|
94
88
|
- !ruby/object:Gem::Version
|
95
89
|
version: 11.1.3
|
96
90
|
type: :development
|
97
91
|
prerelease: false
|
98
92
|
version_requirements: !ruby/object:Gem::Requirement
|
99
93
|
requirements:
|
100
|
-
- -
|
94
|
+
- - ">="
|
101
95
|
- !ruby/object:Gem::Version
|
102
96
|
version: 11.1.3
|
103
97
|
- !ruby/object:Gem::Dependency
|
104
98
|
name: yard
|
105
99
|
requirement: !ruby/object:Gem::Requirement
|
106
100
|
requirements:
|
107
|
-
- -
|
101
|
+
- - ">="
|
108
102
|
- !ruby/object:Gem::Version
|
109
103
|
version: 0.9.34
|
110
104
|
type: :development
|
111
105
|
prerelease: false
|
112
106
|
version_requirements: !ruby/object:Gem::Requirement
|
113
107
|
requirements:
|
114
|
-
- -
|
108
|
+
- - ">="
|
115
109
|
- !ruby/object:Gem::Version
|
116
110
|
version: 0.9.34
|
117
111
|
- !ruby/object:Gem::Dependency
|
118
112
|
name: redcarpet
|
119
113
|
requirement: !ruby/object:Gem::Requirement
|
120
114
|
requirements:
|
121
|
-
- -
|
115
|
+
- - ">="
|
122
116
|
- !ruby/object:Gem::Version
|
123
117
|
version: 3.6.0
|
124
118
|
type: :development
|
125
119
|
prerelease: false
|
126
120
|
version_requirements: !ruby/object:Gem::Requirement
|
127
121
|
requirements:
|
128
|
-
- -
|
122
|
+
- - ">="
|
129
123
|
- !ruby/object:Gem::Version
|
130
124
|
version: 3.6.0
|
131
125
|
- !ruby/object:Gem::Dependency
|
132
126
|
name: sqlite3
|
133
127
|
requirement: !ruby/object:Gem::Requirement
|
134
128
|
requirements:
|
135
|
-
- -
|
129
|
+
- - ">="
|
136
130
|
- !ruby/object:Gem::Version
|
137
131
|
version: 1.6.2
|
138
132
|
type: :development
|
139
133
|
prerelease: false
|
140
134
|
version_requirements: !ruby/object:Gem::Requirement
|
141
135
|
requirements:
|
142
|
-
- -
|
136
|
+
- - ">="
|
143
137
|
- !ruby/object:Gem::Version
|
144
138
|
version: 1.6.2
|
145
139
|
description: Orders ActiveRecord items by floating ranks for spaces in-between items.
|
@@ -193,7 +187,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
193
187
|
- !ruby/object:Gem::Version
|
194
188
|
version: '0'
|
195
189
|
requirements: []
|
196
|
-
rubygems_version: 3.
|
190
|
+
rubygems_version: 3.3.7
|
197
191
|
signing_key:
|
198
192
|
specification_version: 4
|
199
193
|
summary: Orders ActiveRecord items by ranks. Influenced by gem ActsAsList.
|