acts_as_tree 2.1.0 → 2.2.0
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 +11 -0
- data/gemfiles/rails-3.0.gemfile +2 -1
- data/gemfiles/rails-3.1.gemfile +2 -1
- data/gemfiles/rails-3.2.gemfile +2 -1
- data/gemfiles/rails-4.0.gemfile +1 -1
- data/lib/acts_as_tree.rb +30 -21
- data/lib/acts_as_tree/version.rb +1 -1
- data/test/acts_as_tree_test.rb +24 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1195db0f542f5b2a66b53ed35a6a3d0e821f282f
|
4
|
+
data.tar.gz: 4564ce6846efa1aeb4f03dc632a1e8f151273757
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4fd0449d5a36b43d11738b6a3d7097a69977e08464530d374b55dd6120bd65f4baeaae3f4122726e609cab2168383def9be5e8c9f6be3f42760e665032105e54
|
7
|
+
data.tar.gz: aec46f7ee97a3731221c21f625efea8bbf7fc86f5ded9e8e7abe77305722711171beaf61d61b412a62ee4e2640980a5c8956a604ef62160ae44830b89a0c165f
|
data/README.md
CHANGED
@@ -59,6 +59,14 @@ In your view you could traverse the tree using
|
|
59
59
|
<% end %>
|
60
60
|
```
|
61
61
|
|
62
|
+
You also could use walk\_tree as an instance method such as:
|
63
|
+
|
64
|
+
```erb
|
65
|
+
<% Page.first.walk_tree do |page, level| %>
|
66
|
+
<%= link_to "#{'-'*level}#{page.name}", page_path(page) %><br />
|
67
|
+
<% end %>
|
68
|
+
```
|
69
|
+
|
62
70
|
## Compatibility
|
63
71
|
|
64
72
|
We no longer support Ruby 1.8 or versions of Rails/ActiveRecord older than 3.0. If you're using a version of ActiveRecord older than 3.0 please use 0.1.1.
|
@@ -66,6 +74,9 @@ We no longer support Ruby 1.8 or versions of Rails/ActiveRecord older than 3.0.
|
|
66
74
|
Moving forward we will do our best to support the latest versions of ActiveRecord and Ruby.
|
67
75
|
|
68
76
|
## Change Log
|
77
|
+
* 2.2.0 - June 15, 2015
|
78
|
+
* Added TreeWalker.walk\_tree instance method. See #32, #37, #38 -- felixbuenemann, genewoo
|
79
|
+
* Fix tests on rails 3.x. See #36 -- marshall-lee
|
69
80
|
* 2.1.0 - September 25, 2014
|
70
81
|
* Added TreeWalker. See #30 -- 545ch4
|
71
82
|
* 2.0.0 - July 3, 2014
|
data/gemfiles/rails-3.0.gemfile
CHANGED
data/gemfiles/rails-3.1.gemfile
CHANGED
data/gemfiles/rails-3.2.gemfile
CHANGED
data/gemfiles/rails-4.0.gemfile
CHANGED
data/lib/acts_as_tree.rb
CHANGED
@@ -185,30 +185,39 @@ module ActsAsTree
|
|
185
185
|
# <%= link_to "#{' '*level}#{page.name}", page_path(page) %><br />
|
186
186
|
# <% end %>
|
187
187
|
#
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
end
|
204
|
-
else
|
205
|
-
block.call node, level
|
206
|
-
node.children.where(options[:where]).each do |child|
|
207
|
-
walk_tree options, level + 1, child, &block
|
208
|
-
end
|
188
|
+
# There is also a walk_tree instance method that starts walking from
|
189
|
+
# the node it is called on.
|
190
|
+
#
|
191
|
+
def walk_tree(options = {}, &block)
|
192
|
+
algorithm = options.fetch :algorithm, :dfs
|
193
|
+
where = options.fetch :where, {}
|
194
|
+
send("walk_tree_#{algorithm}", where, &block)
|
195
|
+
end
|
196
|
+
|
197
|
+
def self.extended(mod)
|
198
|
+
mod.class_eval do
|
199
|
+
def walk_tree(options = {}, &block)
|
200
|
+
algorithm = options.fetch :algorithm, :dfs
|
201
|
+
where = options.fetch :where, {}
|
202
|
+
self.class.send("walk_tree_#{algorithm}", where, self, &block)
|
209
203
|
end
|
210
204
|
end
|
211
205
|
end
|
206
|
+
|
207
|
+
private
|
208
|
+
|
209
|
+
def walk_tree_bfs(where = {}, node = nil, level = -1, &block)
|
210
|
+
nodes = (node.nil? ? roots : node.children).where(where)
|
211
|
+
nodes.each { |child| block.call child, level + 1 }
|
212
|
+
nodes.each { |child| walk_tree_bfs where, child, level + 1, &block }
|
213
|
+
end
|
214
|
+
|
215
|
+
def walk_tree_dfs(where = {}, node = nil, level = -1, &block)
|
216
|
+
block.call node, level unless level == -1
|
217
|
+
nodes = (node.nil? ? roots : node.children).where(where)
|
218
|
+
nodes.each { |child| walk_tree_dfs where, child, level + 1, &block }
|
219
|
+
end
|
220
|
+
|
212
221
|
end
|
213
222
|
|
214
223
|
module InstanceMethods
|
data/lib/acts_as_tree/version.rb
CHANGED
data/test/acts_as_tree_test.rb
CHANGED
@@ -24,7 +24,12 @@ class MiniTest::Unit::TestCase
|
|
24
24
|
end
|
25
25
|
}
|
26
26
|
|
27
|
-
|
27
|
+
begin
|
28
|
+
subscribed = ActiveSupport::Notifications.subscribe("sql.active_record", &counter_f)
|
29
|
+
result = block.call
|
30
|
+
ensure
|
31
|
+
ActiveSupport::Notifications.unsubscribe subscribed
|
32
|
+
end
|
28
33
|
|
29
34
|
[count, result]
|
30
35
|
end
|
@@ -267,8 +272,10 @@ class TreeTest < MiniTest::Unit::TestCase
|
|
267
272
|
|
268
273
|
def test_tree_walker
|
269
274
|
assert_equal false, TreeMixin.respond_to?(:walk_tree)
|
275
|
+
assert_equal false, TreeMixin.new.respond_to?(:walk_tree)
|
270
276
|
TreeMixin.extend ActsAsTree::TreeWalker
|
271
277
|
assert_equal true, TreeMixin.respond_to?(:walk_tree)
|
278
|
+
assert_equal true, TreeMixin.new.respond_to?(:walk_tree)
|
272
279
|
|
273
280
|
walk_tree_dfs_output = <<-END.gsub(/^\s+/, '')
|
274
281
|
1
|
@@ -281,6 +288,14 @@ class TreeTest < MiniTest::Unit::TestCase
|
|
281
288
|
END
|
282
289
|
assert_equal walk_tree_dfs_output, capture_stdout { TreeMixin.walk_tree{|elem, level| puts "#{'-'*level}#{elem.id}"} }
|
283
290
|
|
291
|
+
walk_tree_dfs_sub_output = <<-END.gsub(/^\s+/, '')
|
292
|
+
2
|
293
|
+
-3
|
294
|
+
--4
|
295
|
+
5
|
296
|
+
END
|
297
|
+
assert_equal walk_tree_dfs_sub_output, capture_stdout { @root1.walk_tree{|elem, level| puts "#{'-'*level}#{elem.id}"} }
|
298
|
+
|
284
299
|
walk_tree_bfs_output = <<-END.gsub(/^\s+/, '')
|
285
300
|
1
|
286
301
|
6
|
@@ -291,6 +306,14 @@ class TreeTest < MiniTest::Unit::TestCase
|
|
291
306
|
---4
|
292
307
|
END
|
293
308
|
assert_equal walk_tree_bfs_output, capture_stdout { TreeMixin.walk_tree(:algorithm => :bfs){|elem, level| puts "#{'-'*level}#{elem.id}"} }
|
309
|
+
|
310
|
+
walk_tree_bfs_sub_output = <<-END.gsub(/^\s+/, '')
|
311
|
+
2
|
312
|
+
5
|
313
|
+
-3
|
314
|
+
--4
|
315
|
+
END
|
316
|
+
assert_equal walk_tree_bfs_sub_output, capture_stdout { @root1.walk_tree(:algorithm => :bfs){|elem, level| puts "#{'-'*level}#{elem.id}"} }
|
294
317
|
end
|
295
318
|
end
|
296
319
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: acts_as_tree
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Erik Dahlstrand
|
@@ -12,7 +12,7 @@ authors:
|
|
12
12
|
autorequire:
|
13
13
|
bindir: bin
|
14
14
|
cert_chain: []
|
15
|
-
date:
|
15
|
+
date: 2015-06-14 00:00:00.000000000 Z
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
18
18
|
name: activerecord
|
@@ -116,7 +116,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
116
116
|
version: '0'
|
117
117
|
requirements: []
|
118
118
|
rubyforge_project:
|
119
|
-
rubygems_version: 2.
|
119
|
+
rubygems_version: 2.4.6
|
120
120
|
signing_key:
|
121
121
|
specification_version: 4
|
122
122
|
summary: Provides a simple tree behaviour to active_record models.
|