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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fb250e95788139cb03e2e54560819ed5841904faebd13a8ecb5902f46d0d0a35
4
- data.tar.gz: 36ad4c7c01156f08be41395994359fd9ddbae0280c821348086703da3b0138a7
3
+ metadata.gz: 3c665111b3d1da9b578d19b1c49203ae597e49a06e09f274e92cb7cecca03687
4
+ data.tar.gz: d4d682b766b048afcc9af37fabcb99e37e683a2d0924e32a2d4a3941a6c29f36
5
5
  SHA512:
6
- metadata.gz: 6ef434d2c8b9dd945c6cafae76b6398b54cc2db33e2c96f518c3abf237d789a5da413322067627f1931e6acff9f0730fd61d077025530d85e94818e2a1583260
7
- data.tar.gz: d225b605fa64c2af642895e7075e373edc1eab17944f2a49e508d80be5fdf2571bc0b69f58d5a0001a054e1447864c4acb0ba60169146ce48a431213cb6637a1
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. 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+`:
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. rank
270
- 2. time updated columns (`updated_at` for example)
271
- 3. primary key (`id` for example)
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
 
@@ -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", "~> 6.0.3", ">= 6.0.3.6"
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"
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
- padded_array = pad_array(higher_items.pluck(rank_column), 0)
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|
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ActsAsRankedList
4
- VERSION = "0.2.2"
4
+ VERSION = "0.4.0"
5
5
  end
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.2.2
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: 2023-04-24 00:00:00.000000000 Z
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.6
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.6
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.1.6
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.