closure_tree 4.2.6 → 4.2.7
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 +14 -6
- data/lib/closure_tree/hierarchy_maintenance.rb +13 -4
- data/lib/closure_tree/version.rb +1 -1
- data/spec/cuisine_type_spec.rb +8 -0
- data/spec/spec_helper.rb +1 -1
- data/spec/tag_examples.rb +7 -0
- metadata +41 -27
checksums.yaml
CHANGED
@@ -1,7 +1,15 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
YWUwYTFjNDQ4ZDI3ZDhkZTc0MWU1ZmY4MDZkZmMxZDdjZjY3MmFjMw==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
YzdmYTU0ZDNkODUyOGNkNTMyZDE4YTQ4ZTg3MzY4ZTRhMzhjZTllZA==
|
7
|
+
!binary "U0hBNTEy":
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
ZDMxNjQxNjYxZGYyNDMxNjM5MDhmZGQ0MzMyYTI4ZDU3ZWUwZmIwYjk1NTBj
|
10
|
+
ZTQ0N2YwYTIwMWYzNGQ2MDAwYTQ1MjBiM2MyMmNjZTY3ZTNiNTJkNWI1NWE2
|
11
|
+
NzQ4MDMxODYzMGQ1YTkxN2VkNTE3YjU2NTI0ZDQ0ODZkOGNlODE=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
MzBjNmRmYmVlYWUzZjEyYjBlNjViNDEwYWVmOWU0ZTBmZGQwMWI2YTIzNGE4
|
14
|
+
OWE3ZTcxNTBiMzk0OWYzZjliMzcxNzg0M2YxZWJiNzQ4OTYwYTFhN2ZjMjU3
|
15
|
+
M2M1ZmUzOWVmMmFhMzgyZmIzNmVlNjgyNjExMjUyMzBkNDhkYmM=
|
@@ -17,9 +17,10 @@ module ClosureTree
|
|
17
17
|
|
18
18
|
def _ct_validate
|
19
19
|
if !@_ct_skip_cycle_detection &&
|
20
|
-
|
21
|
-
|
22
|
-
parent.
|
20
|
+
!new_record? && # don't validate for cycles if we're a new record
|
21
|
+
changes[_ct.parent_column_name] && # don't validate for cycles if we didn't change our parent
|
22
|
+
parent.present? && # don't validate if we're root
|
23
|
+
parent.self_and_ancestors.include?(self) # < this is expensive :\
|
23
24
|
errors.add(_ct.parent_column_sym, "You cannot add an ancestor as a descendant")
|
24
25
|
end
|
25
26
|
end
|
@@ -30,7 +31,15 @@ module ClosureTree
|
|
30
31
|
end
|
31
32
|
|
32
33
|
def _ct_after_save
|
33
|
-
|
34
|
+
if changes[_ct.parent_column_name] || @was_new_record
|
35
|
+
rebuild!
|
36
|
+
end
|
37
|
+
if changes[_ct.parent_column_name] && !@was_new_record
|
38
|
+
# Resetting the ancestral collections addresses
|
39
|
+
# https://github.com/mceachen/closure_tree/issues/68
|
40
|
+
ancestor_hierarchies.reload
|
41
|
+
self_and_ancestors.reload
|
42
|
+
end
|
34
43
|
@was_new_record = false # we aren't new anymore.
|
35
44
|
true # don't cancel anything.
|
36
45
|
end
|
data/lib/closure_tree/version.rb
CHANGED
data/spec/cuisine_type_spec.rb
CHANGED
@@ -27,4 +27,12 @@ describe CuisineType do
|
|
27
27
|
it "sets the table_name of the hierarchy class properly" do
|
28
28
|
CuisineTypeHierarchy.table_name.should == ActiveRecord::Base.table_name_prefix + "cuisine_type_hierarchies" + ActiveRecord::Base.table_name_suffix
|
29
29
|
end
|
30
|
+
|
31
|
+
it 'fixes self_and_ancestors properly on reparenting' do
|
32
|
+
a = CuisineType.create! :name => 'a'
|
33
|
+
b = CuisineType.create! :name => 'b'
|
34
|
+
b.self_and_ancestors.to_a.should == [b]
|
35
|
+
a.children << b
|
36
|
+
b.self_and_ancestors.to_a.should == [b, a]
|
37
|
+
end
|
30
38
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -32,7 +32,7 @@ ActiveRecord::Base.configurations = YAML::load(ERB.new(IO.read(plugin_test_dir +
|
|
32
32
|
ActiveRecord::Base.establish_connection(ENV["DB"])
|
33
33
|
ActiveRecord::Migration.verbose = false
|
34
34
|
if ENV['NONUKES']
|
35
|
-
puts
|
35
|
+
puts 'skipping database creation'
|
36
36
|
else
|
37
37
|
require 'db/schema'
|
38
38
|
end
|
data/spec/tag_examples.rb
CHANGED
@@ -97,6 +97,13 @@ shared_examples_for "Tag (without fixtures)" do
|
|
97
97
|
tag_class.leaves.should be_empty
|
98
98
|
DestroyedTag.all.map { |t| t.name }.should =~ %w{root mid leaf}
|
99
99
|
end
|
100
|
+
|
101
|
+
it 'fix self_and_ancestors properly on reparenting' do
|
102
|
+
t = tag_class.create! :name => 'moar leaf'
|
103
|
+
t.self_and_ancestors.to_a.should == [t]
|
104
|
+
@mid.children << t
|
105
|
+
t.self_and_ancestors.to_a.should == [t, @mid, @root]
|
106
|
+
end
|
100
107
|
end
|
101
108
|
|
102
109
|
context "3 tag explicit_create db" do
|
metadata
CHANGED
@@ -1,167 +1,181 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: closure_tree
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.2.
|
4
|
+
version: 4.2.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matthew McEachen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-07-
|
11
|
+
date: 2013-07-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - '>='
|
17
|
+
- - ! '>='
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: 3.0.0
|
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
26
|
version: 3.0.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: with_advisory_lock
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - '>='
|
31
|
+
- - ! '>='
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: 0.0.9
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - '>='
|
38
|
+
- - ! '>='
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: 0.0.9
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rake
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - '>='
|
45
|
+
- - ! '>='
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - '>='
|
52
|
+
- - ! '>='
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: yard
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - '>='
|
59
|
+
- - ! '>='
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '0'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- - '>='
|
66
|
+
- - ! '>='
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rspec
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- - '>='
|
73
|
+
- - ! '>='
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: '0'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- - '>='
|
80
|
+
- - ! '>='
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rspec-instafail
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ! '>='
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ! '>='
|
81
95
|
- !ruby/object:Gem::Version
|
82
96
|
version: '0'
|
83
97
|
- !ruby/object:Gem::Dependency
|
84
98
|
name: fuubar
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|
86
100
|
requirements:
|
87
|
-
- - '>='
|
101
|
+
- - ! '>='
|
88
102
|
- !ruby/object:Gem::Version
|
89
103
|
version: '0'
|
90
104
|
type: :development
|
91
105
|
prerelease: false
|
92
106
|
version_requirements: !ruby/object:Gem::Requirement
|
93
107
|
requirements:
|
94
|
-
- - '>='
|
108
|
+
- - ! '>='
|
95
109
|
- !ruby/object:Gem::Version
|
96
110
|
version: '0'
|
97
111
|
- !ruby/object:Gem::Dependency
|
98
112
|
name: rspec-rails
|
99
113
|
requirement: !ruby/object:Gem::Requirement
|
100
114
|
requirements:
|
101
|
-
- - '>='
|
115
|
+
- - ! '>='
|
102
116
|
- !ruby/object:Gem::Version
|
103
117
|
version: '0'
|
104
118
|
type: :development
|
105
119
|
prerelease: false
|
106
120
|
version_requirements: !ruby/object:Gem::Requirement
|
107
121
|
requirements:
|
108
|
-
- - '>='
|
122
|
+
- - ! '>='
|
109
123
|
- !ruby/object:Gem::Version
|
110
124
|
version: '0'
|
111
125
|
- !ruby/object:Gem::Dependency
|
112
126
|
name: mysql2
|
113
127
|
requirement: !ruby/object:Gem::Requirement
|
114
128
|
requirements:
|
115
|
-
- - '>='
|
129
|
+
- - ! '>='
|
116
130
|
- !ruby/object:Gem::Version
|
117
131
|
version: '0'
|
118
132
|
type: :development
|
119
133
|
prerelease: false
|
120
134
|
version_requirements: !ruby/object:Gem::Requirement
|
121
135
|
requirements:
|
122
|
-
- - '>='
|
136
|
+
- - ! '>='
|
123
137
|
- !ruby/object:Gem::Version
|
124
138
|
version: '0'
|
125
139
|
- !ruby/object:Gem::Dependency
|
126
140
|
name: pg
|
127
141
|
requirement: !ruby/object:Gem::Requirement
|
128
142
|
requirements:
|
129
|
-
- - '>='
|
143
|
+
- - ! '>='
|
130
144
|
- !ruby/object:Gem::Version
|
131
145
|
version: '0'
|
132
146
|
type: :development
|
133
147
|
prerelease: false
|
134
148
|
version_requirements: !ruby/object:Gem::Requirement
|
135
149
|
requirements:
|
136
|
-
- - '>='
|
150
|
+
- - ! '>='
|
137
151
|
- !ruby/object:Gem::Version
|
138
152
|
version: '0'
|
139
153
|
- !ruby/object:Gem::Dependency
|
140
154
|
name: sqlite3
|
141
155
|
requirement: !ruby/object:Gem::Requirement
|
142
156
|
requirements:
|
143
|
-
- - '>='
|
157
|
+
- - ! '>='
|
144
158
|
- !ruby/object:Gem::Version
|
145
159
|
version: '0'
|
146
160
|
type: :development
|
147
161
|
prerelease: false
|
148
162
|
version_requirements: !ruby/object:Gem::Requirement
|
149
163
|
requirements:
|
150
|
-
- - '>='
|
164
|
+
- - ! '>='
|
151
165
|
- !ruby/object:Gem::Version
|
152
166
|
version: '0'
|
153
167
|
- !ruby/object:Gem::Dependency
|
154
168
|
name: uuidtools
|
155
169
|
requirement: !ruby/object:Gem::Requirement
|
156
170
|
requirements:
|
157
|
-
- - '>='
|
171
|
+
- - ! '>='
|
158
172
|
- !ruby/object:Gem::Version
|
159
173
|
version: '0'
|
160
174
|
type: :development
|
161
175
|
prerelease: false
|
162
176
|
version_requirements: !ruby/object:Gem::Requirement
|
163
177
|
requirements:
|
164
|
-
- - '>='
|
178
|
+
- - ! '>='
|
165
179
|
- !ruby/object:Gem::Version
|
166
180
|
version: '0'
|
167
181
|
description: Easily and efficiently make your ActiveRecord model support hierarchies
|
@@ -213,17 +227,17 @@ require_paths:
|
|
213
227
|
- lib
|
214
228
|
required_ruby_version: !ruby/object:Gem::Requirement
|
215
229
|
requirements:
|
216
|
-
- - '>='
|
230
|
+
- - ! '>='
|
217
231
|
- !ruby/object:Gem::Version
|
218
232
|
version: '0'
|
219
233
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
220
234
|
requirements:
|
221
|
-
- - '>='
|
235
|
+
- - ! '>='
|
222
236
|
- !ruby/object:Gem::Version
|
223
237
|
version: '0'
|
224
238
|
requirements: []
|
225
239
|
rubyforge_project:
|
226
|
-
rubygems_version: 2.0.
|
240
|
+
rubygems_version: 2.0.3
|
227
241
|
signing_key:
|
228
242
|
specification_version: 4
|
229
243
|
summary: Easily and efficiently make your ActiveRecord model support hierarchies
|