ranked-model 0.4.7 → 0.4.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/FUNDING.yml +3 -0
- data/.github/dependabot.yml +6 -0
- data/.github/workflows/ci.yml +90 -0
- data/.gitignore +1 -0
- data/.travis.yml +5 -0
- data/Appraisals +22 -39
- data/Gemfile +3 -3
- data/Readme.mkd +33 -2
- data/gemfiles/rails_5_2.gemfile +3 -3
- data/gemfiles/rails_6_0.gemfile +2 -2
- data/gemfiles/rails_6_1.gemfile +22 -0
- data/gemfiles/rails_7_0.gemfile +22 -0
- data/lib/ranked-model/ranker.rb +3 -4
- data/lib/ranked-model/version.rb +1 -1
- data/ranked-model.gemspec +2 -2
- data/spec/duck-model/inferred_ducks_spec.rb +71 -0
- data/spec/support/database.yml +2 -0
- metadata +19 -15
- data/gemfiles/rails_4_2.gemfile +0 -23
- data/gemfiles/rails_5_0.gemfile +0 -22
- data/gemfiles/rails_5_1.gemfile +0 -22
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 61451e859060c7d8a3f889bd54327b103797d728312cedef66efa1b25d11767f
|
4
|
+
data.tar.gz: 2e1df0f514decf2e43667c2d0139e510202fc0ebc32aed758831ea20497aaf1a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d046ed8e55533b8f453a67e0c705738e9353b22b20b01310381a56195803ee066cd647e1b8801484ca79518a8ea2394577841d4b9c4eb97d12f0b36246c1bfc7
|
7
|
+
data.tar.gz: ca05b38d74cbe11544cabb70890c64d26c9a94c4608d2b4d7da1253535efc03775ef3fed80fc9b93709f503f3f53a8cd725b7f2b8c43ad8565a72139f0ec53e5
|
data/.github/FUNDING.yml
ADDED
@@ -0,0 +1,90 @@
|
|
1
|
+
---
|
2
|
+
name: CI
|
3
|
+
on: [push, pull_request]
|
4
|
+
|
5
|
+
jobs:
|
6
|
+
tests:
|
7
|
+
name: Ruby ${{ matrix.ruby }}, ${{ matrix.gemfile }}, DB ${{ matrix.db }}
|
8
|
+
runs-on: ${{ matrix.os }}
|
9
|
+
strategy:
|
10
|
+
fail-fast: false
|
11
|
+
matrix:
|
12
|
+
ruby:
|
13
|
+
- 2.4
|
14
|
+
- 2.5
|
15
|
+
- 2.6
|
16
|
+
- 2.7
|
17
|
+
- '3.0'
|
18
|
+
- 3.1
|
19
|
+
gemfile:
|
20
|
+
- gemfiles/rails_5_2.gemfile
|
21
|
+
- gemfiles/rails_6_0.gemfile
|
22
|
+
- gemfiles/rails_6_1.gemfile
|
23
|
+
- gemfiles/rails_7_0.gemfile
|
24
|
+
db:
|
25
|
+
- sqlite
|
26
|
+
- mysql
|
27
|
+
- postgresql
|
28
|
+
exclude:
|
29
|
+
- ruby: 2.4
|
30
|
+
gemfile: gemfiles/rails_6_0.gemfile
|
31
|
+
- ruby: 2.4
|
32
|
+
gemfile: gemfiles/rails_6_1.gemfile
|
33
|
+
- ruby: 2.4
|
34
|
+
gemfile: gemfiles/rails_7_0.gemfile
|
35
|
+
- ruby: 2.5
|
36
|
+
gemfile: gemfiles/rails_7_0.gemfile
|
37
|
+
- ruby: 2.6
|
38
|
+
gemfile: gemfiles/rails_7_0.gemfile
|
39
|
+
- ruby: '3.0'
|
40
|
+
gemfile: gemfiles/rails_5_2.gemfile
|
41
|
+
- ruby: 3.1
|
42
|
+
gemfile: gemfiles/rails_5_2.gemfile
|
43
|
+
- ruby: 3.1
|
44
|
+
gemfile: gemfiles/rails_6_0.gemfile
|
45
|
+
os:
|
46
|
+
- ubuntu-latest
|
47
|
+
services:
|
48
|
+
mysql:
|
49
|
+
image: mysql:5.7
|
50
|
+
env:
|
51
|
+
MYSQL_ALLOW_EMPTY_PASSWORD: yes
|
52
|
+
ports:
|
53
|
+
- 3306:3306
|
54
|
+
options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
|
55
|
+
|
56
|
+
postgres:
|
57
|
+
# Docker Hub image
|
58
|
+
image: postgres
|
59
|
+
# Provide the password for postgres
|
60
|
+
env:
|
61
|
+
POSTGRES_USER: postgres
|
62
|
+
POSTGRES_HOST_AUTH_METHOD: trust
|
63
|
+
ports:
|
64
|
+
- 5432:5432
|
65
|
+
# Set health checks to wait until postgres has started
|
66
|
+
options: >-
|
67
|
+
--health-cmd pg_isready
|
68
|
+
--health-interval 10s
|
69
|
+
--health-timeout 5s
|
70
|
+
--health-retries 5
|
71
|
+
env:
|
72
|
+
BUNDLE_GEMFILE: ${{ matrix.gemfile }}
|
73
|
+
DB: ${{ matrix.db }}
|
74
|
+
steps:
|
75
|
+
- uses: actions/checkout@v3
|
76
|
+
- name: Set up Ruby
|
77
|
+
uses: ruby/setup-ruby@v1
|
78
|
+
with:
|
79
|
+
ruby-version: ${{ matrix.ruby }}
|
80
|
+
bundler-cache: true
|
81
|
+
- name: "Create MySQL database"
|
82
|
+
if: ${{ env.DB == 'mysql' }}
|
83
|
+
run: |
|
84
|
+
mysql -h 127.0.0.1 -u root -e 'create database ranked_model_test;'
|
85
|
+
- name: "Create PostgreSQL database"
|
86
|
+
if: ${{ env.DB == 'postgresql' }}
|
87
|
+
run: |
|
88
|
+
psql -c 'create database ranked_model_test;' -h localhost -U postgres
|
89
|
+
- name: Run tests
|
90
|
+
run: bundle exec rake
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
@@ -26,6 +26,7 @@ gemfile:
|
|
26
26
|
- gemfiles/rails_5_1.gemfile
|
27
27
|
- gemfiles/rails_5_2.gemfile
|
28
28
|
- gemfiles/rails_6_0.gemfile
|
29
|
+
- gemfiles/rails_6_1.gemfile
|
29
30
|
matrix:
|
30
31
|
exclude:
|
31
32
|
# Rails <6 does not support Ruby 3, see:
|
@@ -49,3 +50,7 @@ matrix:
|
|
49
50
|
gemfile: gemfiles/rails_6_0.gemfile
|
50
51
|
- rvm: jruby-9.1.17.0
|
51
52
|
gemfile: gemfiles/rails_6_0.gemfile
|
53
|
+
- rvm: 2.4
|
54
|
+
gemfile: gemfiles/rails_6_1.gemfile
|
55
|
+
- rvm: jruby-9.1.17.0
|
56
|
+
gemfile: gemfiles/rails_6_1.gemfile
|
data/Appraisals
CHANGED
@@ -1,72 +1,55 @@
|
|
1
|
-
appraise "rails-
|
2
|
-
group :sqlite do
|
3
|
-
gem "activerecord-jdbcsqlite3-adapter", "~> 1.3.24", platform: :jruby
|
4
|
-
end
|
5
|
-
group :mysql do
|
6
|
-
gem "mysql2", "~> 0.4.0", platform: :ruby
|
7
|
-
gem "jdbc-mysql", "~> 5.1.47", platform: :jruby
|
8
|
-
gem "activerecord-jdbcmysql-adapter", "~> 1.3.24", platform: :jruby
|
9
|
-
end
|
10
|
-
group :postgresql do
|
11
|
-
gem "pg", "~> 0.18.4", platform: :ruby
|
12
|
-
gem "activerecord-jdbcpostgresql-adapter", "~> 1.3.24", platform: :jruby
|
13
|
-
end
|
14
|
-
|
15
|
-
gem "activerecord", "~> 4.2.0"
|
16
|
-
end
|
17
|
-
|
18
|
-
appraise "rails-5-0" do
|
1
|
+
appraise "rails-5-2" do
|
19
2
|
group :sqlite do
|
20
|
-
gem "activerecord-jdbcsqlite3-adapter", "~>
|
3
|
+
gem "activerecord-jdbcsqlite3-adapter", "~> 52.0", platform: :jruby
|
21
4
|
end
|
22
5
|
group :mysql do
|
23
|
-
gem "activerecord-jdbcmysql-adapter", "~>
|
6
|
+
gem "activerecord-jdbcmysql-adapter", "~> 52.0", platform: :jruby
|
24
7
|
end
|
25
8
|
group :postgresql do
|
26
|
-
gem "activerecord-jdbcpostgresql-adapter", "~>
|
9
|
+
gem "activerecord-jdbcpostgresql-adapter", "~> 52.0", platform: :jruby
|
27
10
|
end
|
28
11
|
|
29
|
-
gem "activerecord", "~> 5.
|
12
|
+
gem "activerecord", "~> 5.2.0"
|
30
13
|
end
|
31
14
|
|
32
|
-
appraise "rails-
|
15
|
+
appraise "rails-6-0" do
|
33
16
|
group :sqlite do
|
34
|
-
gem "
|
17
|
+
gem "sqlite3", "~> 1.4", platform: :ruby
|
18
|
+
gem "activerecord-jdbcsqlite3-adapter", "~> 60.0", platform: :jruby
|
35
19
|
end
|
36
20
|
group :mysql do
|
37
|
-
gem "activerecord-jdbcmysql-adapter", "~>
|
21
|
+
gem "activerecord-jdbcmysql-adapter", "~> 60.0", platform: :jruby
|
38
22
|
end
|
39
23
|
group :postgresql do
|
40
|
-
gem "activerecord-jdbcpostgresql-adapter", "~>
|
24
|
+
gem "activerecord-jdbcpostgresql-adapter", "~> 60.0", platform: :jruby
|
41
25
|
end
|
42
|
-
|
43
|
-
gem "activerecord", "~> 5.1.0"
|
26
|
+
gem "activerecord", "~> 6.0.0"
|
44
27
|
end
|
45
28
|
|
46
|
-
appraise "rails-
|
29
|
+
appraise "rails-6-1" do
|
47
30
|
group :sqlite do
|
48
|
-
gem "
|
31
|
+
gem "sqlite3", "~> 1.4", platform: :ruby
|
32
|
+
gem "activerecord-jdbcsqlite3-adapter", "~> 61.0", platform: :jruby
|
49
33
|
end
|
50
34
|
group :mysql do
|
51
|
-
gem "activerecord-jdbcmysql-adapter", "~>
|
35
|
+
gem "activerecord-jdbcmysql-adapter", "~> 61.0", platform: :jruby
|
52
36
|
end
|
53
37
|
group :postgresql do
|
54
|
-
gem "activerecord-jdbcpostgresql-adapter", "~>
|
38
|
+
gem "activerecord-jdbcpostgresql-adapter", "~> 61.0", platform: :jruby
|
55
39
|
end
|
56
|
-
|
57
|
-
gem "activerecord", "~> 5.2.0"
|
40
|
+
gem "activerecord", "~> 6.1.0"
|
58
41
|
end
|
59
42
|
|
60
|
-
appraise "rails-
|
43
|
+
appraise "rails-7-0" do
|
61
44
|
group :sqlite do
|
62
45
|
gem "sqlite3", "~> 1.4", platform: :ruby
|
63
|
-
gem "activerecord-jdbcsqlite3-adapter", "~>
|
46
|
+
gem "activerecord-jdbcsqlite3-adapter", "~> 61.0", platform: :jruby
|
64
47
|
end
|
65
48
|
group :mysql do
|
66
|
-
gem "activerecord-jdbcmysql-adapter", "~>
|
49
|
+
gem "activerecord-jdbcmysql-adapter", "~> 61.0", platform: :jruby
|
67
50
|
end
|
68
51
|
group :postgresql do
|
69
|
-
gem "activerecord-jdbcpostgresql-adapter", "~>
|
52
|
+
gem "activerecord-jdbcpostgresql-adapter", "~> 61.0", platform: :jruby
|
70
53
|
end
|
71
|
-
gem "activerecord", "~>
|
54
|
+
gem "activerecord", "~> 7.0.0"
|
72
55
|
end
|
data/Gemfile
CHANGED
@@ -4,13 +4,13 @@ source "https://rubygems.org"
|
|
4
4
|
gemspec
|
5
5
|
|
6
6
|
group :sqlite do
|
7
|
-
gem "sqlite3",
|
7
|
+
gem "sqlite3", platform: :ruby
|
8
8
|
end
|
9
9
|
|
10
10
|
group :postgresql do
|
11
|
-
gem "pg",
|
11
|
+
gem "pg", platform: :ruby
|
12
12
|
end
|
13
13
|
|
14
14
|
group :mysql do
|
15
|
-
gem "mysql2",
|
15
|
+
gem "mysql2", platform: :ruby
|
16
16
|
end
|
data/Readme.mkd
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
Installation
|
6
6
|
------------
|
7
7
|
|
8
|
-
ranked-model passes specs with Rails 4.2, 5.0, 5.1, 5.2 and 6.
|
8
|
+
ranked-model passes specs with Rails 4.2, 5.0, 5.1, 5.2, 6.0 and 6.1 for MySQL, Postgres, and SQLite on Ruby 2.4 through 3.0 (with exceptions, please check the CI setup for supported combinations), and jruby-9.1.17.0 where Rails supports the platform.
|
9
9
|
|
10
10
|
To install ranked-model, just add it to your `Gemfile`:
|
11
11
|
|
@@ -136,6 +136,37 @@ Pond.first.ducks.rank(:swimming_order)
|
|
136
136
|
Duck.walking.rank(:walking)
|
137
137
|
```
|
138
138
|
|
139
|
+
Drawbacks
|
140
|
+
---------
|
141
|
+
|
142
|
+
While ranked-model is performant when storing data, it might cause N+1s depending on how you write your code. Consider this snippet:
|
143
|
+
|
144
|
+
```ruby
|
145
|
+
ducks = Duck.all
|
146
|
+
ducks.map do |duck|
|
147
|
+
{
|
148
|
+
id: duck.id,
|
149
|
+
position: duck.row_order_rank # This causes N+1!
|
150
|
+
}
|
151
|
+
end
|
152
|
+
```
|
153
|
+
|
154
|
+
Every call to `duck.row_order_rank` will make a call to the DB to check the rank of that
|
155
|
+
particular element. If you have a long list of elements this might cause issues to your DB.
|
156
|
+
|
157
|
+
In order to avoid that, you can use the `rank(:your_rank)` scope and some Ruby code to get
|
158
|
+
the element's position:
|
159
|
+
|
160
|
+
```ruby
|
161
|
+
ducks = Duck.rank(:row_order).all
|
162
|
+
ducks.map.with_index do |duck, index|
|
163
|
+
{
|
164
|
+
id: duck.id,
|
165
|
+
position: index
|
166
|
+
}
|
167
|
+
end
|
168
|
+
```
|
169
|
+
|
139
170
|
Single Table Inheritance (STI)
|
140
171
|
------------------------------
|
141
172
|
|
@@ -212,7 +243,7 @@ class AddRowOrderToDucks < ActiveRecord::Migration[6.0]
|
|
212
243
|
Duck.update_all('row_order = EXTRACT(EPOCH FROM created_at)')
|
213
244
|
|
214
245
|
# Alternatively, implement any other sorting default
|
215
|
-
# Duck.order(created_at: :desc).
|
246
|
+
# Duck.order(created_at: :desc).each do |duck|
|
216
247
|
# duck.update!(row_order: duck.created_at.to_i + duck.age / 2)
|
217
248
|
# end
|
218
249
|
end
|
data/gemfiles/rails_5_2.gemfile
CHANGED
@@ -5,17 +5,17 @@ source "https://rubygems.org"
|
|
5
5
|
gem "activerecord", "~> 5.2.0"
|
6
6
|
|
7
7
|
group :sqlite do
|
8
|
-
gem "sqlite3",
|
8
|
+
gem "sqlite3", platform: :ruby
|
9
9
|
gem "activerecord-jdbcsqlite3-adapter", "~> 52.0", platform: :jruby
|
10
10
|
end
|
11
11
|
|
12
12
|
group :postgresql do
|
13
|
-
gem "pg",
|
13
|
+
gem "pg", platform: :ruby
|
14
14
|
gem "activerecord-jdbcpostgresql-adapter", "~> 52.0", platform: :jruby
|
15
15
|
end
|
16
16
|
|
17
17
|
group :mysql do
|
18
|
-
gem "mysql2",
|
18
|
+
gem "mysql2", platform: :ruby
|
19
19
|
gem "activerecord-jdbcmysql-adapter", "~> 52.0", platform: :jruby
|
20
20
|
end
|
21
21
|
|
data/gemfiles/rails_6_0.gemfile
CHANGED
@@ -10,12 +10,12 @@ group :sqlite do
|
|
10
10
|
end
|
11
11
|
|
12
12
|
group :postgresql do
|
13
|
-
gem "pg",
|
13
|
+
gem "pg", platform: :ruby
|
14
14
|
gem "activerecord-jdbcpostgresql-adapter", "~> 60.0", platform: :jruby
|
15
15
|
end
|
16
16
|
|
17
17
|
group :mysql do
|
18
|
-
gem "mysql2",
|
18
|
+
gem "mysql2", platform: :ruby
|
19
19
|
gem "activerecord-jdbcmysql-adapter", "~> 60.0", platform: :jruby
|
20
20
|
end
|
21
21
|
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# This file was generated by Appraisal
|
2
|
+
|
3
|
+
source "https://rubygems.org"
|
4
|
+
|
5
|
+
gem "activerecord", "~> 6.1.0"
|
6
|
+
|
7
|
+
group :sqlite do
|
8
|
+
gem "sqlite3", "~> 1.4", platform: :ruby
|
9
|
+
gem "activerecord-jdbcsqlite3-adapter", "~> 61.0", platform: :jruby
|
10
|
+
end
|
11
|
+
|
12
|
+
group :postgresql do
|
13
|
+
gem "pg", platform: :ruby
|
14
|
+
gem "activerecord-jdbcpostgresql-adapter", "~> 61.0", platform: :jruby
|
15
|
+
end
|
16
|
+
|
17
|
+
group :mysql do
|
18
|
+
gem "mysql2", platform: :ruby
|
19
|
+
gem "activerecord-jdbcmysql-adapter", "~> 61.0", platform: :jruby
|
20
|
+
end
|
21
|
+
|
22
|
+
gemspec path: "../"
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# This file was generated by Appraisal
|
2
|
+
|
3
|
+
source "https://rubygems.org"
|
4
|
+
|
5
|
+
gem "activerecord", "~> 7.0.0"
|
6
|
+
|
7
|
+
group :sqlite do
|
8
|
+
gem "sqlite3", "~> 1.4", platform: :ruby
|
9
|
+
gem "activerecord-jdbcsqlite3-adapter", "~> 61.0", platform: :jruby
|
10
|
+
end
|
11
|
+
|
12
|
+
group :postgresql do
|
13
|
+
gem "pg", platform: :ruby
|
14
|
+
gem "activerecord-jdbcpostgresql-adapter", "~> 61.0", platform: :jruby
|
15
|
+
end
|
16
|
+
|
17
|
+
group :mysql do
|
18
|
+
gem "mysql2", platform: :ruby
|
19
|
+
gem "activerecord-jdbcmysql-adapter", "~> 61.0", platform: :jruby
|
20
|
+
end
|
21
|
+
|
22
|
+
gemspec path: "../"
|
data/lib/ranked-model/ranker.rb
CHANGED
@@ -114,6 +114,7 @@ module RankedModel
|
|
114
114
|
|
115
115
|
def rank_at value
|
116
116
|
instance.send "#{ranker.column}=", value
|
117
|
+
instance.send "#{ranker.name}_position=", relative_rank unless position.is_a?(Integer)
|
117
118
|
end
|
118
119
|
|
119
120
|
def rank_changed?
|
@@ -236,7 +237,7 @@ module RankedModel
|
|
236
237
|
new_rank = (gap_size * position) + RankedModel::MIN_RANK_VALUE
|
237
238
|
|
238
239
|
if item.instance.id == instance.id
|
239
|
-
|
240
|
+
instance.send "#{ranker.column}=", new_rank
|
240
241
|
else
|
241
242
|
item.update_rank! new_rank
|
242
243
|
end
|
@@ -294,9 +295,7 @@ module RankedModel
|
|
294
295
|
|
295
296
|
def current_last
|
296
297
|
@current_last ||= begin
|
297
|
-
if (ordered_instance = finder.
|
298
|
-
reverse.
|
299
|
-
first)
|
298
|
+
if (ordered_instance = finder.last)
|
300
299
|
RankedModel::Ranker::Mapper.new ranker, ordered_instance
|
301
300
|
end
|
302
301
|
end
|
data/lib/ranked-model/version.rb
CHANGED
data/ranked-model.gemspec
CHANGED
@@ -13,12 +13,12 @@ Gem::Specification.new do |s|
|
|
13
13
|
s.description = %q{ranked-model is a modern row sorting library built for Rails 4.2+. It uses ARel aggressively and is better optimized than most other libraries.}
|
14
14
|
s.license = 'MIT'
|
15
15
|
|
16
|
-
s.add_dependency "activerecord", ">=
|
16
|
+
s.add_dependency "activerecord", ">= 5.2"
|
17
17
|
s.add_development_dependency "rspec", "~> 3"
|
18
18
|
s.add_development_dependency "rspec-its"
|
19
19
|
s.add_development_dependency "mocha"
|
20
20
|
s.add_development_dependency "database_cleaner", "~> 1.7.0"
|
21
|
-
s.add_development_dependency "rake", "
|
21
|
+
s.add_development_dependency "rake", ">= 12.3.3"
|
22
22
|
s.add_development_dependency "appraisal"
|
23
23
|
s.add_development_dependency "pry"
|
24
24
|
|
@@ -0,0 +1,71 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Duck do
|
4
|
+
before do
|
5
|
+
5.times do |i|
|
6
|
+
Duck.create(name: "Duck #{i + 1}")
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
describe "updating a duck order with last" do
|
11
|
+
it "should maintain the order after creating a new duck" do
|
12
|
+
duck = Duck.first
|
13
|
+
duck.update(row_position: :last)
|
14
|
+
expect(duck.row_rank).to eq(4)
|
15
|
+
|
16
|
+
Duck.create(name: "Wacky")
|
17
|
+
|
18
|
+
expect(duck.row_rank).to eq(4)
|
19
|
+
|
20
|
+
duck.update(pond: 'Shin')
|
21
|
+
expect(duck.row_rank).to eq(4)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
describe "updating a duck order with first" do
|
26
|
+
it "should maintain the order after creating a new duck" do
|
27
|
+
duck = Duck.last
|
28
|
+
duck.update(row_position: :first)
|
29
|
+
expect(duck.row_rank).to eq(0)
|
30
|
+
|
31
|
+
Duck.create(name: "Wacky")
|
32
|
+
|
33
|
+
expect(duck.row_rank).to eq(0)
|
34
|
+
|
35
|
+
duck.update(pond: 'Shin')
|
36
|
+
expect(duck.row_rank).to eq(0)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
describe "updating a duck order with up" do
|
41
|
+
it "should maintain the order after creating a new duck" do
|
42
|
+
duck_id = Duck.ranker(:row).with(Duck.new).current_at_position(2).instance.id
|
43
|
+
duck = Duck.find(duck_id)
|
44
|
+
duck.update(row_position: :up)
|
45
|
+
expect(duck.row_rank).to eq(1)
|
46
|
+
|
47
|
+
Duck.create(name: "Wacky")
|
48
|
+
|
49
|
+
expect(duck.row_rank).to eq(1)
|
50
|
+
|
51
|
+
duck.update(pond: 'Shin')
|
52
|
+
expect(duck.row_rank).to eq(1)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
describe "updating a duck order with down" do
|
57
|
+
it "should maintain the order after creating a new duck" do
|
58
|
+
duck_id = Duck.ranker(:row).with(Duck.new).current_at_position(2).instance.id
|
59
|
+
duck = Duck.find(duck_id)
|
60
|
+
duck.update(row_position: :down)
|
61
|
+
expect(duck.row_rank).to eq(3)
|
62
|
+
|
63
|
+
Duck.create(name: "Wacky")
|
64
|
+
|
65
|
+
expect(duck.row_rank).to eq(3)
|
66
|
+
|
67
|
+
duck.update(pond: 'Shin')
|
68
|
+
expect(duck.row_rank).to eq(3)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
data/spec/support/database.yml
CHANGED
@@ -6,6 +6,7 @@ sqlite:
|
|
6
6
|
|
7
7
|
mysql:
|
8
8
|
adapter: mysql2
|
9
|
+
host: 127.0.0.1
|
9
10
|
database: ranked_model_test
|
10
11
|
pool: 5
|
11
12
|
timeout: 5000
|
@@ -14,6 +15,7 @@ mysql:
|
|
14
15
|
|
15
16
|
postgresql:
|
16
17
|
adapter: postgresql
|
18
|
+
host: 127.0.0.1
|
17
19
|
database: ranked_model_test
|
18
20
|
pool: 5
|
19
21
|
timeout: 5000
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ranked-model
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matthew Beale
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-08-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '5.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: '
|
26
|
+
version: '5.2'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rspec
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -84,16 +84,16 @@ dependencies:
|
|
84
84
|
name: rake
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- - "
|
87
|
+
- - ">="
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version:
|
89
|
+
version: 12.3.3
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- - "
|
94
|
+
- - ">="
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version:
|
96
|
+
version: 12.3.3
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: appraisal
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -130,6 +130,9 @@ executables: []
|
|
130
130
|
extensions: []
|
131
131
|
extra_rdoc_files: []
|
132
132
|
files:
|
133
|
+
- ".github/FUNDING.yml"
|
134
|
+
- ".github/dependabot.yml"
|
135
|
+
- ".github/workflows/ci.yml"
|
133
136
|
- ".gitignore"
|
134
137
|
- ".rspec"
|
135
138
|
- ".travis.yml"
|
@@ -138,11 +141,10 @@ files:
|
|
138
141
|
- LICENSE
|
139
142
|
- Rakefile
|
140
143
|
- Readme.mkd
|
141
|
-
- gemfiles/rails_4_2.gemfile
|
142
|
-
- gemfiles/rails_5_0.gemfile
|
143
|
-
- gemfiles/rails_5_1.gemfile
|
144
144
|
- gemfiles/rails_5_2.gemfile
|
145
145
|
- gemfiles/rails_6_0.gemfile
|
146
|
+
- gemfiles/rails_6_1.gemfile
|
147
|
+
- gemfiles/rails_7_0.gemfile
|
146
148
|
- lib/ranked-model.rb
|
147
149
|
- lib/ranked-model/railtie.rb
|
148
150
|
- lib/ranked-model/ranker.rb
|
@@ -151,6 +153,7 @@ files:
|
|
151
153
|
- ranked-model.gemspec
|
152
154
|
- spec/duck-model/column_default_ducks_spec.rb
|
153
155
|
- spec/duck-model/duck_spec.rb
|
156
|
+
- spec/duck-model/inferred_ducks_spec.rb
|
154
157
|
- spec/duck-model/lots_of_ducks_spec.rb
|
155
158
|
- spec/duck-model/wrong_ducks_spec.rb
|
156
159
|
- spec/ego-model/ego_spec.rb
|
@@ -168,7 +171,7 @@ homepage: https://github.com/mixonic/ranked-model
|
|
168
171
|
licenses:
|
169
172
|
- MIT
|
170
173
|
metadata: {}
|
171
|
-
post_install_message:
|
174
|
+
post_install_message:
|
172
175
|
rdoc_options: []
|
173
176
|
require_paths:
|
174
177
|
- lib
|
@@ -183,13 +186,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
183
186
|
- !ruby/object:Gem::Version
|
184
187
|
version: '0'
|
185
188
|
requirements: []
|
186
|
-
rubygems_version: 3.
|
187
|
-
signing_key:
|
189
|
+
rubygems_version: 3.2.32
|
190
|
+
signing_key:
|
188
191
|
specification_version: 4
|
189
192
|
summary: An acts_as_sortable replacement built for Rails 4.2+
|
190
193
|
test_files:
|
191
194
|
- spec/duck-model/column_default_ducks_spec.rb
|
192
195
|
- spec/duck-model/duck_spec.rb
|
196
|
+
- spec/duck-model/inferred_ducks_spec.rb
|
193
197
|
- spec/duck-model/lots_of_ducks_spec.rb
|
194
198
|
- spec/duck-model/wrong_ducks_spec.rb
|
195
199
|
- spec/ego-model/ego_spec.rb
|
data/gemfiles/rails_4_2.gemfile
DELETED
@@ -1,23 +0,0 @@
|
|
1
|
-
# This file was generated by Appraisal
|
2
|
-
|
3
|
-
source "https://rubygems.org"
|
4
|
-
|
5
|
-
gem "activerecord", "~> 4.2.0"
|
6
|
-
|
7
|
-
group :sqlite do
|
8
|
-
gem "sqlite3", "~> 1.3.13", platform: :ruby
|
9
|
-
gem "activerecord-jdbcsqlite3-adapter", "~> 1.3.24", platform: :jruby
|
10
|
-
end
|
11
|
-
|
12
|
-
group :postgresql do
|
13
|
-
gem "pg", "~> 0.18.4", platform: :ruby
|
14
|
-
gem "activerecord-jdbcpostgresql-adapter", "~> 1.3.24", platform: :jruby
|
15
|
-
end
|
16
|
-
|
17
|
-
group :mysql do
|
18
|
-
gem "mysql2", "~> 0.4.0", platform: :ruby
|
19
|
-
gem "jdbc-mysql", "~> 5.1.47", platform: :jruby
|
20
|
-
gem "activerecord-jdbcmysql-adapter", "~> 1.3.24", platform: :jruby
|
21
|
-
end
|
22
|
-
|
23
|
-
gemspec path: "../"
|
data/gemfiles/rails_5_0.gemfile
DELETED
@@ -1,22 +0,0 @@
|
|
1
|
-
# This file was generated by Appraisal
|
2
|
-
|
3
|
-
source "https://rubygems.org"
|
4
|
-
|
5
|
-
gem "activerecord", "~> 5.0.0"
|
6
|
-
|
7
|
-
group :sqlite do
|
8
|
-
gem "sqlite3", "~> 1.3.13", platform: :ruby
|
9
|
-
gem "activerecord-jdbcsqlite3-adapter", "~> 50.0", platform: :jruby
|
10
|
-
end
|
11
|
-
|
12
|
-
group :postgresql do
|
13
|
-
gem "pg", "~> 1.2.0", platform: :ruby
|
14
|
-
gem "activerecord-jdbcpostgresql-adapter", "~> 50.0", platform: :jruby
|
15
|
-
end
|
16
|
-
|
17
|
-
group :mysql do
|
18
|
-
gem "mysql2", "~> 0.5.0", platform: :ruby
|
19
|
-
gem "activerecord-jdbcmysql-adapter", "~> 50.0", platform: :jruby
|
20
|
-
end
|
21
|
-
|
22
|
-
gemspec path: "../"
|
data/gemfiles/rails_5_1.gemfile
DELETED
@@ -1,22 +0,0 @@
|
|
1
|
-
# This file was generated by Appraisal
|
2
|
-
|
3
|
-
source "https://rubygems.org"
|
4
|
-
|
5
|
-
gem "activerecord", "~> 5.1.0"
|
6
|
-
|
7
|
-
group :sqlite do
|
8
|
-
gem "sqlite3", "~> 1.3.13", platform: :ruby
|
9
|
-
gem "activerecord-jdbcsqlite3-adapter", "~> 51.0", platform: :jruby
|
10
|
-
end
|
11
|
-
|
12
|
-
group :postgresql do
|
13
|
-
gem "pg", "~> 1.2.0", platform: :ruby
|
14
|
-
gem "activerecord-jdbcpostgresql-adapter", "~> 51.0", platform: :jruby
|
15
|
-
end
|
16
|
-
|
17
|
-
group :mysql do
|
18
|
-
gem "mysql2", "~> 0.5.0", platform: :ruby
|
19
|
-
gem "activerecord-jdbcmysql-adapter", "~> 51.0", platform: :jruby
|
20
|
-
end
|
21
|
-
|
22
|
-
gemspec path: "../"
|