text_based_nested_set 0.0.4 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/text_based_nested_set/model.rb +27 -1
- data/lib/text_based_nested_set/version.rb +1 -1
- data/spec/text_based_nested_set_spec.rb +39 -15
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: aa90ceee83e89edf345915734c9b5ec744fd610c
|
4
|
+
data.tar.gz: cab3873fbbbf845540707dab84d8f1227e9889e3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fc1d0749a43faaea964cf15a84964516d23c0398a2e4615566012639999bfb6e84da134dceacad326d5ef24e8236073f7bf952098c3f6c8f1b7eedd1e1817bdf
|
7
|
+
data.tar.gz: 45e8bd6d91f6f3074d402ab9807e4f88450403a206e8b1e62ff80d965952c49faa1e1315bc5c36df41fe41afe0ded7c845942ebf4edae7dcf3f1df94e1bae03f
|
@@ -15,6 +15,16 @@ module BeyondAlbert
|
|
15
15
|
r.rebuild
|
16
16
|
end
|
17
17
|
end
|
18
|
+
|
19
|
+
def position_valid?
|
20
|
+
root_nodes = where(parent_id: 0)
|
21
|
+
root_nodes.each do |r|
|
22
|
+
unless r.check_position
|
23
|
+
return false
|
24
|
+
end
|
25
|
+
end
|
26
|
+
true
|
27
|
+
end
|
18
28
|
end
|
19
29
|
|
20
30
|
def move_to_root
|
@@ -136,7 +146,7 @@ module BeyondAlbert
|
|
136
146
|
|
137
147
|
def ancestors
|
138
148
|
parent_ids = self.path.split('/').select {|v| v != "" && v != "0"}
|
139
|
-
current_class.where(id: parent_ids)
|
149
|
+
current_class.where(id: parent_ids).order("LENGTH(path) ASC")
|
140
150
|
end
|
141
151
|
|
142
152
|
def self_and_ancestors
|
@@ -202,9 +212,25 @@ module BeyondAlbert
|
|
202
212
|
end
|
203
213
|
end
|
204
214
|
|
215
|
+
def check_position
|
216
|
+
logger = Logger.new(STDOUT)
|
217
|
+
if self.children.size != 0
|
218
|
+
if self.children.size == self.children.last.position + 1
|
219
|
+
self.children.each do |c|
|
220
|
+
c.check_position
|
221
|
+
end
|
222
|
+
else
|
223
|
+
logger.info("position not correct, node id: #{self.id}")
|
224
|
+
return false
|
225
|
+
end
|
226
|
+
end
|
227
|
+
return true
|
228
|
+
end
|
229
|
+
|
205
230
|
private
|
206
231
|
|
207
232
|
def in_tenacious_transaction(&block)
|
233
|
+
logger = Logger.new(STDOUT)
|
208
234
|
retry_count = 0
|
209
235
|
begin
|
210
236
|
transaction(&block)
|
@@ -21,7 +21,7 @@ describe 'TextBasedNestedSet' do
|
|
21
21
|
@child_1_2_1 = create(:category, id: 3, name: "child_1_2_1", parent_id: 6, path: "/0/1/2/6/", position: 0)
|
22
22
|
end
|
23
23
|
|
24
|
-
describe 'move_to_root' do
|
24
|
+
describe '#move_to_root' do
|
25
25
|
it 'should move to the root of the tree' do
|
26
26
|
@child_1_2.move_to_root
|
27
27
|
@child_1_2.reload
|
@@ -38,7 +38,7 @@ describe 'TextBasedNestedSet' do
|
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
41
|
-
describe 'move_to_left_of' do
|
41
|
+
describe '#move_to_left_of' do
|
42
42
|
it 'should move to the left of target node' do
|
43
43
|
@child_1_2.move_to_left_of(@child_2)
|
44
44
|
|
@@ -54,7 +54,7 @@ describe 'TextBasedNestedSet' do
|
|
54
54
|
end
|
55
55
|
end
|
56
56
|
|
57
|
-
describe 'move_to_right_of' do
|
57
|
+
describe '#move_to_right_of' do
|
58
58
|
it 'should move to the right of target node' do
|
59
59
|
@child_1_1.move_to_right_of(@child_1)
|
60
60
|
|
@@ -70,7 +70,7 @@ describe 'TextBasedNestedSet' do
|
|
70
70
|
end
|
71
71
|
end
|
72
72
|
|
73
|
-
describe 'move_to_child_of' do
|
73
|
+
describe '#move_to_child_of' do
|
74
74
|
it 'should move to the child of target node' do
|
75
75
|
@child_1_2.move_to_child_of(@child_1_1)
|
76
76
|
|
@@ -84,7 +84,7 @@ describe 'TextBasedNestedSet' do
|
|
84
84
|
end
|
85
85
|
end
|
86
86
|
|
87
|
-
describe 'parent' do
|
87
|
+
describe '#parent' do
|
88
88
|
it "should return current node's parent node" do
|
89
89
|
expect(@child_1_1.parent.name).to eq("child_1")
|
90
90
|
end
|
@@ -94,39 +94,39 @@ describe 'TextBasedNestedSet' do
|
|
94
94
|
end
|
95
95
|
end
|
96
96
|
|
97
|
-
describe 'ancestors' do
|
97
|
+
describe '#ancestors' do
|
98
98
|
it "should return current node's ancestors node" do
|
99
99
|
expect(@child_1_1.ancestors).to eq([@root, @child_1])
|
100
100
|
end
|
101
101
|
end
|
102
102
|
|
103
|
-
describe 'self_and_ancestors' do
|
103
|
+
describe '#self_and_ancestors' do
|
104
104
|
it "should return current node's ancestors node include self" do
|
105
105
|
expect(@child_1_1.self_and_ancestors).to eq([@root, @child_1, @child_1_1])
|
106
106
|
end
|
107
107
|
end
|
108
108
|
|
109
|
-
describe 'children' do
|
109
|
+
describe '#children' do
|
110
110
|
it "should return current node's children node" do
|
111
111
|
expect(@child_1.children).to eq([@child_1_1, @child_1_2, @child_1_3])
|
112
112
|
end
|
113
113
|
end
|
114
114
|
|
115
|
-
describe 'descendants' do
|
115
|
+
describe '#descendants' do
|
116
116
|
it "should return current node's all descendants" do
|
117
117
|
expect(@child_1.descendants).to eq([@child_1_1, @child_1_2, @child_1_3, @child_1_2_1, @child_1_1_1])
|
118
118
|
expect(@root.descendants).to eq([@child_1, @child_2, @child_1_1, @child_1_2, @child_1_3, @child_1_2_1, @child_1_1_1])
|
119
119
|
end
|
120
120
|
end
|
121
121
|
|
122
|
-
describe 'self_and_descendants' do
|
122
|
+
describe '#self_and_descendants' do
|
123
123
|
it "should return current node and it's all descendants" do
|
124
124
|
expect(@child_1.self_and_descendants).to eq([@child_1, @child_1_1, @child_1_2, @child_1_3, @child_1_2_1, @child_1_1_1])
|
125
125
|
expect(@root.self_and_descendants).to eq([@root, @child_1, @child_2, @child_1_1, @child_1_2, @child_1_3, @child_1_2_1, @child_1_1_1])
|
126
126
|
end
|
127
127
|
end
|
128
128
|
|
129
|
-
describe 'right_sibling' do
|
129
|
+
describe '#right_sibling' do
|
130
130
|
it "should return current node's right sibling" do
|
131
131
|
expect(@child_1_2.right_sibling).to eq(@child_1_3)
|
132
132
|
end
|
@@ -136,7 +136,7 @@ describe 'TextBasedNestedSet' do
|
|
136
136
|
end
|
137
137
|
end
|
138
138
|
|
139
|
-
describe 'left_sibling' do
|
139
|
+
describe '#left_sibling' do
|
140
140
|
it "should return current node's left sibling" do
|
141
141
|
expect(@child_1_2.left_sibling).to eq(@child_1_1)
|
142
142
|
end
|
@@ -146,7 +146,7 @@ describe 'TextBasedNestedSet' do
|
|
146
146
|
end
|
147
147
|
end
|
148
148
|
|
149
|
-
describe 'root?' do
|
149
|
+
describe '#root?' do
|
150
150
|
it "should return true if current node is root node" do
|
151
151
|
expect(@root.root?).to eq(true)
|
152
152
|
end
|
@@ -165,7 +165,7 @@ describe 'TextBasedNestedSet' do
|
|
165
165
|
end
|
166
166
|
end
|
167
167
|
|
168
|
-
describe 'rebuild' do
|
168
|
+
describe '#rebuild' do
|
169
169
|
it "should rebuild current node's all descendants, set path and position again " do
|
170
170
|
@root.descendants.each do |d|
|
171
171
|
d.update(path: nil, position: nil)
|
@@ -197,6 +197,30 @@ describe 'TextBasedNestedSet' do
|
|
197
197
|
end
|
198
198
|
end
|
199
199
|
|
200
|
+
describe 'position_valid?' do
|
201
|
+
it "should return true if all records' position in table is right" do
|
202
|
+
expect(Category.position_valid?).to eq(true)
|
203
|
+
end
|
204
|
+
|
205
|
+
it "should return false if some records' position in table is out of order" do
|
206
|
+
@child_2.position = 0
|
207
|
+
@child_2.save!
|
208
|
+
expect(Category.position_valid?).to eq(false)
|
209
|
+
end
|
210
|
+
end
|
211
|
+
|
212
|
+
describe '#check_position' do
|
213
|
+
it "should return true if current tree's children's position is right" do
|
214
|
+
expect(@child_1.check_position).to eq(true)
|
215
|
+
end
|
216
|
+
|
217
|
+
it "should return false if current tree's children's position is out of order" do
|
218
|
+
@child_1_3.position = 4
|
219
|
+
@child_1_3.save!
|
220
|
+
expect(@child_1.check_position).to eq(false)
|
221
|
+
end
|
222
|
+
end
|
223
|
+
|
200
224
|
describe 'private destroy_descendants' do
|
201
225
|
it 'should destroy descendants when itself be destroyed' do
|
202
226
|
@child_1.destroy
|
@@ -206,7 +230,7 @@ describe 'TextBasedNestedSet' do
|
|
206
230
|
end
|
207
231
|
|
208
232
|
describe 'default value test' do
|
209
|
-
it 'should create a root node' do
|
233
|
+
it 'should create a root node with default value: parent_id: 0, path: "/0/", position: 0' do
|
210
234
|
root1 = create(:category, name: 'root1')
|
211
235
|
expect(root1.parent_id).to eq(0)
|
212
236
|
expect(root1.path).to eq('/0/')
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: text_based_nested_set
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- beyondalbert
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-03-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|