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.
@@ -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
- * Rails 4.0 Support! -- mischa78
36
- * Readme Fixes -- mischa78 & seanhussey
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.
@@ -1,6 +1,6 @@
1
1
  source "https://rubygems.org"
2
2
 
3
- gem "rails", "~> 4.0.0.beta1"
3
+ gem "rails", "~> 4.0"
4
4
  gem "acts_as_tree", path: "../"
5
5
 
6
6
  gemspec path: "../"
@@ -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
@@ -1,3 +1,3 @@
1
1
  module ActsAsTree
2
- VERSION = "1.3.0"
2
+ VERSION = "1.4.0"
3
3
  end
@@ -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.3.0
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-03-29 00:00:00.000000000 Z
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: 1.8.23
103
+ rubygems_version: 2.0.0
112
104
  signing_key:
113
- specification_version: 3
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