narabikae 0.2.0 → 0.2.1
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/README.md +3 -1
- data/lib/narabikae/position.rb +10 -9
- data/lib/narabikae/version.rb +1 -1
- metadata +34 -23
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 07a44a8622d1ba78a90fa807d5947713bb47fdff0cb644973d8a5657ce37d453
|
4
|
+
data.tar.gz: 17dc1892a77e52ea46b6753cd621d5a0fb9f45ffd2c1ab0adbbac138063437ed
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3a459cabd5079dd5c308726e40ad42fdcbe082e6b266e94220d27cf336f3b62da6d5aba39df39c443079533509a31c20ff7b5ebffca2bfc25dece8e340f6ef7f
|
7
|
+
data.tar.gz: 9875163ef2ef2ffb5f48ffde782883b215875c498ef214027be373a88ac6789f8f172db6480ac50eb4e44804da4b9cdc1bfacefcbadfef57d5f41c2b5c1558f5
|
data/README.md
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
# Narabikae
|
2
2
|
|
3
|
+
[](https://github.com/kazu-2020/narabikae/actions/workflows/ci.yaml)
|
4
|
+
|
3
5
|
Narabikae(Japanese: 並び替え) means "reorder". Like [acts_as_list](https://github.com/brendon/acts_as_list), this gem provides automatic order management and reordering functionality for your records.
|
4
6
|
|
5
7
|
One of the key advantages of this gem is its use of the [fractional indexing algorithm](https://www.figma.com/blog/realtime-editing-of-ordered-sequences/#fractional-indexing), which greatly enhances the efficiency of reordering operations. With Narabikae, regardless of the amount of data, "only a single record" is updated during the reordering process 🎉.
|
@@ -79,7 +81,7 @@ Task.create([
|
|
79
81
|
{ name: 'task-3' }
|
80
82
|
])
|
81
83
|
Task.order(:position).pluck(:name, :position)
|
82
|
-
# => [["task-1", "a0"], ["task-
|
84
|
+
# => [["task-1", "a0"], ["task-2", "a1"], ["task-3", "a2"]]
|
83
85
|
|
84
86
|
```
|
85
87
|
|
data/lib/narabikae/position.rb
CHANGED
@@ -28,12 +28,12 @@ module Narabikae
|
|
28
28
|
def find_position_after(target, **args)
|
29
29
|
merged_args = { challenge: 10 }.merge(args)
|
30
30
|
# when target is nil, try to generate key from the last position
|
31
|
-
|
32
|
-
|
33
|
-
)
|
31
|
+
target_key = target&.send(option.field) || current_last_position
|
32
|
+
key = FractionalIndexer.generate_key(prev_key: target_key)
|
34
33
|
return key if valid?(key)
|
35
34
|
|
36
|
-
(merged_args[:challenge] || 0).times do
|
35
|
+
(merged_args[:challenge] || 0).times do |i|
|
36
|
+
key = FractionalIndexer.generate_key(prev_key: target_key, next_key: key)
|
37
37
|
key += random_fractional
|
38
38
|
return key if valid?(key)
|
39
39
|
end
|
@@ -60,12 +60,12 @@ module Narabikae
|
|
60
60
|
def find_position_before(target, **args)
|
61
61
|
merged_args = { challenge: 10 }.merge(args)
|
62
62
|
# when target is nil, try to generate key from the first position
|
63
|
-
|
64
|
-
|
65
|
-
)
|
63
|
+
target_key = target&.send(option.field) || current_first_position
|
64
|
+
key = FractionalIndexer.generate_key(next_key: target_key)
|
66
65
|
return key if valid?(key)
|
67
66
|
|
68
|
-
(merged_args[:challenge] || 0).times do
|
67
|
+
(merged_args[:challenge] || 0).times do |i|
|
68
|
+
key = FractionalIndexer.generate_key(prev_key: key, next_key: target_key)
|
69
69
|
key += random_fractional
|
70
70
|
return key if valid?(key)
|
71
71
|
end
|
@@ -95,7 +95,8 @@ module Narabikae
|
|
95
95
|
)
|
96
96
|
return key if valid?(key)
|
97
97
|
|
98
|
-
(merged_args[:challenge] || 0).times do
|
98
|
+
(merged_args[:challenge] || 0).times do |i|
|
99
|
+
key = FractionalIndexer.generate_key(prev_key: key, next_key: next_key)
|
99
100
|
key += random_fractional
|
100
101
|
return key if valid?(key)
|
101
102
|
end
|
data/lib/narabikae/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: narabikae
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- matazou
|
8
|
-
autorequire:
|
9
8
|
bindir: bin
|
10
9
|
cert_chain: []
|
11
|
-
date:
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
12
11
|
dependencies:
|
13
12
|
- !ruby/object:Gem::Dependency
|
14
13
|
name: fractional_indexer
|
@@ -16,84 +15,98 @@ dependencies:
|
|
16
15
|
requirements:
|
17
16
|
- - ">="
|
18
17
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
18
|
+
version: 0.4.0
|
20
19
|
type: :runtime
|
21
20
|
prerelease: false
|
22
21
|
version_requirements: !ruby/object:Gem::Requirement
|
23
22
|
requirements:
|
24
23
|
- - ">="
|
25
24
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
25
|
+
version: 0.4.0
|
27
26
|
- !ruby/object:Gem::Dependency
|
28
27
|
name: activerecord
|
29
28
|
requirement: !ruby/object:Gem::Requirement
|
30
29
|
requirements:
|
31
30
|
- - ">="
|
32
31
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
32
|
+
version: '6.1'
|
34
33
|
type: :runtime
|
35
34
|
prerelease: false
|
36
35
|
version_requirements: !ruby/object:Gem::Requirement
|
37
36
|
requirements:
|
38
37
|
- - ">="
|
39
38
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
39
|
+
version: '6.1'
|
41
40
|
- !ruby/object:Gem::Dependency
|
42
41
|
name: activesupport
|
43
42
|
requirement: !ruby/object:Gem::Requirement
|
44
43
|
requirements:
|
45
44
|
- - ">="
|
46
45
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
46
|
+
version: '6.1'
|
48
47
|
type: :runtime
|
49
48
|
prerelease: false
|
50
49
|
version_requirements: !ruby/object:Gem::Requirement
|
51
50
|
requirements:
|
52
51
|
- - ">="
|
53
52
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
53
|
+
version: '6.1'
|
55
54
|
- !ruby/object:Gem::Dependency
|
56
55
|
name: rspec-rails
|
57
56
|
requirement: !ruby/object:Gem::Requirement
|
58
57
|
requirements:
|
59
58
|
- - ">="
|
60
59
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
60
|
+
version: '0'
|
62
61
|
type: :development
|
63
62
|
prerelease: false
|
64
63
|
version_requirements: !ruby/object:Gem::Requirement
|
65
64
|
requirements:
|
66
65
|
- - ">="
|
67
66
|
- !ruby/object:Gem::Version
|
68
|
-
version:
|
67
|
+
version: '0'
|
69
68
|
- !ruby/object:Gem::Dependency
|
70
69
|
name: rubocop-rails-omakase
|
71
70
|
requirement: !ruby/object:Gem::Requirement
|
72
71
|
requirements:
|
73
|
-
- - "
|
72
|
+
- - "~>"
|
74
73
|
- !ruby/object:Gem::Version
|
75
|
-
version:
|
74
|
+
version: 1.0.0
|
76
75
|
type: :development
|
77
76
|
prerelease: false
|
78
77
|
version_requirements: !ruby/object:Gem::Requirement
|
79
78
|
requirements:
|
80
|
-
- - "
|
79
|
+
- - "~>"
|
81
80
|
- !ruby/object:Gem::Version
|
82
|
-
version:
|
81
|
+
version: 1.0.0
|
83
82
|
- !ruby/object:Gem::Dependency
|
84
83
|
name: rubocop-rspec
|
85
84
|
requirement: !ruby/object:Gem::Requirement
|
86
85
|
requirements:
|
87
|
-
- - "
|
86
|
+
- - "~>"
|
88
87
|
- !ruby/object:Gem::Version
|
89
|
-
version:
|
88
|
+
version: 3.1.0
|
90
89
|
type: :development
|
91
90
|
prerelease: false
|
92
91
|
version_requirements: !ruby/object:Gem::Requirement
|
93
92
|
requirements:
|
94
|
-
- - "
|
93
|
+
- - "~>"
|
95
94
|
- !ruby/object:Gem::Version
|
96
|
-
version:
|
95
|
+
version: 3.1.0
|
96
|
+
- !ruby/object:Gem::Dependency
|
97
|
+
name: appraisal
|
98
|
+
requirement: !ruby/object:Gem::Requirement
|
99
|
+
requirements:
|
100
|
+
- - '='
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: 2.5.0
|
103
|
+
type: :development
|
104
|
+
prerelease: false
|
105
|
+
version_requirements: !ruby/object:Gem::Requirement
|
106
|
+
requirements:
|
107
|
+
- - '='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: 2.5.0
|
97
110
|
description: 'provides functionality similar to acts_as_list. However, by managing
|
98
111
|
position using a fractional indexing system, it allows database record updates during
|
99
112
|
reordering to be completed with only a single update (N = 1)!
|
@@ -125,7 +138,6 @@ metadata:
|
|
125
138
|
source_code_uri: https://github.com/kazu-2020/narabikae
|
126
139
|
allowed_push_host: https://rubygems.org/
|
127
140
|
rubygems_mfa_required: 'true'
|
128
|
-
post_install_message:
|
129
141
|
rdoc_options: []
|
130
142
|
require_paths:
|
131
143
|
- lib
|
@@ -133,15 +145,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
133
145
|
requirements:
|
134
146
|
- - ">="
|
135
147
|
- !ruby/object:Gem::Version
|
136
|
-
version: '0'
|
148
|
+
version: '3.0'
|
137
149
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
138
150
|
requirements:
|
139
151
|
- - ">="
|
140
152
|
- !ruby/object:Gem::Version
|
141
153
|
version: '0'
|
142
154
|
requirements: []
|
143
|
-
rubygems_version: 3.
|
144
|
-
signing_key:
|
155
|
+
rubygems_version: 3.6.7
|
145
156
|
specification_version: 4
|
146
157
|
summary: provides simple position management and sorting functionality for Active
|
147
158
|
Record in Rails.
|