acts_as_tree 1.3.0 → 1.4.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 +7 -0
- data/README.md +27 -4
- data/gemfiles/rails-4.0.gemfile +1 -1
- data/lib/acts_as_tree.rb +48 -0
- data/lib/acts_as_tree/version.rb +1 -1
- data/test/acts_as_tree_test.rb +42 -0
- metadata +13 -21
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 6345f6c0aff0309193dc564612c75fc1ea6b267a
|
4
|
+
data.tar.gz: 5d09b92e6dd13c1bf80be0f0b69d1cfb2c45328d
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 9c048a9ed2b95836a0915e1e95619975ef8bc4a42f7937bdfb258977f3ec4bf9420fc38eb9c5fa21abe7fd359dbb6861ad61d0f003339813c1114610ef5c782a
|
7
|
+
data.tar.gz: 73fe82d6e696819c08633c5850ca1f1a4b588eb3033777df5bbd8331b2e4fc1de2dc636f5da1c5c9fb65fa9a9b8da4fc8740b69877bccd2c67386a199c2e8eb2
|
data/README.md
CHANGED
@@ -2,8 +2,7 @@
|
|
2
2
|
[travis]: (http://travis-ci.org/amerine/acts_as_tree)
|
3
3
|
|
4
4
|
|
5
|
-
ActsAsTree extends ActiveRecord to add simple support for organizing items into
|
6
|
-
parent–children relationships.
|
5
|
+
ActsAsTree extends ActiveRecord to add simple support for organizing items into parent–children relationships.
|
7
6
|
|
8
7
|
## Example
|
9
8
|
|
@@ -24,6 +23,27 @@ root.children # => [child1]
|
|
24
23
|
root.children.first.children.first # => subchild1
|
25
24
|
```
|
26
25
|
|
26
|
+
We also have a convenient `Presentation` module you can mixin if you want a little visual representation of the tree strucuture. Example:
|
27
|
+
|
28
|
+
```ruby
|
29
|
+
class Category < ActiveRecord::Base
|
30
|
+
include ActsAsTree
|
31
|
+
extend ActsAsTree::Presentation
|
32
|
+
|
33
|
+
acts_as_tree order: "name"
|
34
|
+
end
|
35
|
+
|
36
|
+
> Category.tree_view(:name)
|
37
|
+
root
|
38
|
+
|_ child1
|
39
|
+
| |_ subchild1
|
40
|
+
| |_ subchild2
|
41
|
+
|_ child2
|
42
|
+
|_ subchild3
|
43
|
+
|_ subchild4
|
44
|
+
=> nil
|
45
|
+
```
|
46
|
+
|
27
47
|
## Compatibility
|
28
48
|
|
29
49
|
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.
|
@@ -31,9 +51,12 @@ We no longer support Ruby 1.8 or versions of Rails/ActiveRecord older than 3.0.
|
|
31
51
|
Moving forward we will do our best to support the latest versions of ActiveRecord and Ruby.
|
32
52
|
|
33
53
|
## Change Log
|
54
|
+
* 1.4.0 - June 25th, 2013
|
55
|
+
* `Presentation#tree_view` -- rainchen
|
56
|
+
* `root?` && `leaf?` methods. -- xuanxu
|
34
57
|
* 1.3.0 - March 29th, 2013
|
35
|
-
|
36
|
-
|
58
|
+
* Rails 4.0 Support! -- mischa78
|
59
|
+
* Readme Fixes -- mischa78 & seanhussey
|
37
60
|
* 1.2.0 - October 29th, 2012
|
38
61
|
* Adding new `self_with_ancestors` accessor -- fbuenemann
|
39
62
|
* `roots` is now a scope.
|
data/gemfiles/rails-4.0.gemfile
CHANGED
data/lib/acts_as_tree.rb
CHANGED
@@ -105,6 +105,38 @@ module ActsAsTree
|
|
105
105
|
end
|
106
106
|
EOV
|
107
107
|
end
|
108
|
+
|
109
|
+
end
|
110
|
+
|
111
|
+
module Presentation
|
112
|
+
# show records in a tree view
|
113
|
+
# Example:
|
114
|
+
# root
|
115
|
+
# |_ child1
|
116
|
+
# | |_ subchild1
|
117
|
+
# | |_ subchild2
|
118
|
+
# |_ child2
|
119
|
+
# |_ subchild3
|
120
|
+
# |_ subchild4
|
121
|
+
#
|
122
|
+
def tree_view(label_method = :to_s, node = nil, level = -1)
|
123
|
+
if node.nil?
|
124
|
+
puts "root"
|
125
|
+
nodes = roots
|
126
|
+
else
|
127
|
+
label = "|_ #{node.send(label_method)}"
|
128
|
+
if level == 0
|
129
|
+
puts " #{label}"
|
130
|
+
else
|
131
|
+
puts " |#{" "*level}#{label}"
|
132
|
+
end
|
133
|
+
nodes = node.children
|
134
|
+
end
|
135
|
+
nodes.each do |child|
|
136
|
+
tree_view(label_method, child, level+1)
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
108
140
|
end
|
109
141
|
|
110
142
|
module InstanceMethods
|
@@ -152,6 +184,22 @@ module ActsAsTree
|
|
152
184
|
[self] + self.ancestors
|
153
185
|
end
|
154
186
|
|
187
|
+
# Returns true if node has no parent, false otherwise
|
188
|
+
#
|
189
|
+
# subchild1.root? # => false
|
190
|
+
# root.root? # => true
|
191
|
+
def root?
|
192
|
+
parent.nil?
|
193
|
+
end
|
194
|
+
|
195
|
+
# Returns true if node has no children, false otherwise
|
196
|
+
#
|
197
|
+
# subchild1.leaf? # => true
|
198
|
+
# child1.leaf? # => false
|
199
|
+
def leaf?
|
200
|
+
children.count == 0
|
201
|
+
end
|
202
|
+
|
155
203
|
private
|
156
204
|
|
157
205
|
def update_parents_counter_cache
|
data/lib/acts_as_tree/version.rb
CHANGED
data/test/acts_as_tree_test.rb
CHANGED
@@ -179,6 +179,48 @@ class TreeTest < Test::Unit::TestCase
|
|
179
179
|
assert_nil root4_child.reload.parent_id
|
180
180
|
end
|
181
181
|
|
182
|
+
def test_is_root
|
183
|
+
assert_equal true, @root1.root?
|
184
|
+
assert_equal true, @root2.root?
|
185
|
+
assert_equal true, @root3.root?
|
186
|
+
|
187
|
+
assert_equal false, @root_child1.root?
|
188
|
+
assert_equal false, @child1_child.root?
|
189
|
+
assert_equal false, @child1_child_child.root?
|
190
|
+
assert_equal false, @root_child2.root?
|
191
|
+
end
|
192
|
+
|
193
|
+
def test_is_leaf
|
194
|
+
assert_equal true, @root2.leaf?
|
195
|
+
assert_equal true, @root3.leaf?
|
196
|
+
assert_equal true, @child1_child_child.leaf?
|
197
|
+
assert_equal true, @root_child2.leaf?
|
198
|
+
|
199
|
+
assert_equal false, @root1.leaf?
|
200
|
+
assert_equal false, @root_child1.leaf?
|
201
|
+
assert_equal false, @child1_child.leaf?
|
202
|
+
end
|
203
|
+
|
204
|
+
def test_tree_view
|
205
|
+
assert_equal false, Mixin.respond_to?(:tree_view)
|
206
|
+
Mixin.extend ActsAsTree::Presentation
|
207
|
+
assert_equal true, TreeMixin.respond_to?(:tree_view)
|
208
|
+
|
209
|
+
tree_view_outputs = <<-END.gsub(/^ {6}/, '')
|
210
|
+
root
|
211
|
+
|_ 1
|
212
|
+
| |_ 2
|
213
|
+
| |_ 3
|
214
|
+
| |_ 4
|
215
|
+
| |_ 5
|
216
|
+
|_ 6
|
217
|
+
|_ 7
|
218
|
+
END
|
219
|
+
$stdout.reopen # reinitializes $stdout
|
220
|
+
TreeMixin.tree_view(:id)
|
221
|
+
assert_equal tree_view_outputs, $stdout.string
|
222
|
+
end
|
223
|
+
|
182
224
|
end
|
183
225
|
|
184
226
|
class TreeTestWithEagerLoading < Test::Unit::TestCase
|
metadata
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: acts_as_tree
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
5
|
-
prerelease:
|
4
|
+
version: 1.4.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Erik Dahlstrand
|
@@ -12,54 +11,48 @@ authors:
|
|
12
11
|
autorequire:
|
13
12
|
bindir: bin
|
14
13
|
cert_chain: []
|
15
|
-
date: 2013-
|
14
|
+
date: 2013-06-25 00:00:00.000000000 Z
|
16
15
|
dependencies:
|
17
16
|
- !ruby/object:Gem::Dependency
|
18
17
|
name: activerecord
|
19
18
|
requirement: !ruby/object:Gem::Requirement
|
20
|
-
none: false
|
21
19
|
requirements:
|
22
|
-
- -
|
20
|
+
- - '>='
|
23
21
|
- !ruby/object:Gem::Version
|
24
22
|
version: 3.0.0
|
25
23
|
type: :runtime
|
26
24
|
prerelease: false
|
27
25
|
version_requirements: !ruby/object:Gem::Requirement
|
28
|
-
none: false
|
29
26
|
requirements:
|
30
|
-
- -
|
27
|
+
- - '>='
|
31
28
|
- !ruby/object:Gem::Version
|
32
29
|
version: 3.0.0
|
33
30
|
- !ruby/object:Gem::Dependency
|
34
31
|
name: sqlite3
|
35
32
|
requirement: !ruby/object:Gem::Requirement
|
36
|
-
none: false
|
37
33
|
requirements:
|
38
|
-
- -
|
34
|
+
- - '>='
|
39
35
|
- !ruby/object:Gem::Version
|
40
36
|
version: '0'
|
41
37
|
type: :development
|
42
38
|
prerelease: false
|
43
39
|
version_requirements: !ruby/object:Gem::Requirement
|
44
|
-
none: false
|
45
40
|
requirements:
|
46
|
-
- -
|
41
|
+
- - '>='
|
47
42
|
- !ruby/object:Gem::Version
|
48
43
|
version: '0'
|
49
44
|
- !ruby/object:Gem::Dependency
|
50
45
|
name: rdoc
|
51
46
|
requirement: !ruby/object:Gem::Requirement
|
52
|
-
none: false
|
53
47
|
requirements:
|
54
|
-
- -
|
48
|
+
- - '>='
|
55
49
|
- !ruby/object:Gem::Version
|
56
50
|
version: '0'
|
57
51
|
type: :development
|
58
52
|
prerelease: false
|
59
53
|
version_requirements: !ruby/object:Gem::Requirement
|
60
|
-
none: false
|
61
54
|
requirements:
|
62
|
-
- -
|
55
|
+
- - '>='
|
63
56
|
- !ruby/object:Gem::Version
|
64
57
|
version: '0'
|
65
58
|
description: A gem that adds simple support for organizing ActiveRecord models into
|
@@ -89,28 +82,27 @@ files:
|
|
89
82
|
- test/acts_as_tree_test.rb
|
90
83
|
homepage: https://github.com/amerine/acts_as_tree
|
91
84
|
licenses: []
|
85
|
+
metadata: {}
|
92
86
|
post_install_message:
|
93
87
|
rdoc_options:
|
94
88
|
- --charset=UTF-8
|
95
89
|
require_paths:
|
96
90
|
- lib
|
97
91
|
required_ruby_version: !ruby/object:Gem::Requirement
|
98
|
-
none: false
|
99
92
|
requirements:
|
100
|
-
- -
|
93
|
+
- - '>='
|
101
94
|
- !ruby/object:Gem::Version
|
102
95
|
version: '0'
|
103
96
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
104
|
-
none: false
|
105
97
|
requirements:
|
106
|
-
- -
|
98
|
+
- - '>='
|
107
99
|
- !ruby/object:Gem::Version
|
108
100
|
version: '0'
|
109
101
|
requirements: []
|
110
102
|
rubyforge_project:
|
111
|
-
rubygems_version:
|
103
|
+
rubygems_version: 2.0.0
|
112
104
|
signing_key:
|
113
|
-
specification_version:
|
105
|
+
specification_version: 4
|
114
106
|
summary: Provides a simple tree behaviour to active_record models.
|
115
107
|
test_files:
|
116
108
|
- test/acts_as_tree_test.rb
|