basic_tree 1.0.1 → 1.0.2

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.
@@ -1,5 +1,5 @@
1
1
  class BasicTree
2
2
 
3
- VERSION = "1.0.1"
3
+ VERSION = "1.0.2"
4
4
 
5
5
  end
data/lib/basic_tree.rb CHANGED
@@ -3,6 +3,7 @@ require 'active_support/core_ext/object'
3
3
  class BasicTree
4
4
 
5
5
  include Enumerable
6
+ include Comparable
6
7
 
7
8
  class Kids < Array
8
9
  def swap!(p1, p2)
@@ -16,7 +17,9 @@ class BasicTree
16
17
  def initialize(object, parent = nil, &block)
17
18
  self.object = object
18
19
  parent.try(:insert!, self)
19
- instance_eval(&block) if block_given?
20
+ if block_given?
21
+ block.arity == 1 ? yield(self) : instance_eval(&block)
22
+ end
20
23
  end
21
24
 
22
25
  # TODO: test
@@ -35,7 +38,7 @@ class BasicTree
35
38
  kids << basic_tree
36
39
  end
37
40
 
38
- # TODO: self
41
+ # TODO: test
39
42
  def remove!(basic_tree)
40
43
  raise ArgumentError, "Must be a #{self.class}" unless basic_tree.is_a?(self.class)
41
44
  raise StandardError, "Can't remove root" if root?
@@ -84,7 +87,7 @@ class BasicTree
84
87
  end
85
88
 
86
89
  def siblings
87
- root? ? [] : siblings_and_self.delete_if { |s| s == self }
90
+ root? ? [] : siblings_and_self.delete_if { |s| s.equal?(self) }
88
91
  end
89
92
 
90
93
  ##################################################
@@ -122,6 +125,12 @@ class BasicTree
122
125
  root? || siblings_and_self.last == self
123
126
  end
124
127
 
128
+ ##################################################
129
+
130
+ def <=>(other)
131
+ subtree.map(&:object) <=> other.subtree.map(&:object)
132
+ end
133
+
125
134
  ##################################################
126
135
  private
127
136
 
@@ -16,6 +16,16 @@ describe BasicTree do
16
16
  @a12 = @a1.children[1]
17
17
  end
18
18
 
19
+ it "allows for a different initialization syntax" do
20
+ @a.should == BasicTree.new("a") do |t|
21
+ t.add "a1" do |t|
22
+ t.add "a11"
23
+ t.add "a12"
24
+ end
25
+ t.add "a2"
26
+ end
27
+ end
28
+
19
29
  describe "instance methods" do
20
30
  before do
21
31
  @object = "soccer"
@@ -147,6 +157,35 @@ describe BasicTree do
147
157
  end
148
158
  end
149
159
  end
160
+
161
+ describe "#<=>" do
162
+ before do
163
+ @t1 = BasicTree.new "a" do
164
+ add "a1"
165
+ add "a2"
166
+ end
167
+ @t2 = BasicTree.new "a" do
168
+ add "a1"
169
+ add "a2"
170
+ end
171
+ end
172
+
173
+ context "when comparing the subtrees returns a 0" do
174
+ it { (@t1 <=> @t2).should eq(0) }
175
+ end
176
+
177
+ context "when comparing the subtrees returns a 1" do
178
+ before { @t2 = BasicTree.new("a") { add "a1" } }
179
+
180
+ it { (@t1 <=> @t2).should eq(1) }
181
+ end
182
+
183
+ context "when comparing the subtrees returns a -1" do
184
+ before { @t2.add "a3" }
185
+
186
+ it { (@t1 <=> @t2).should eq(-1) }
187
+ end
188
+ end
150
189
  end
151
190
 
152
191
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 1
7
7
  - 0
8
- - 1
9
- version: 1.0.1
8
+ - 2
9
+ version: 1.0.2
10
10
  platform: ruby
11
11
  authors:
12
12
  - Austin Schneider
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2011-03-09 00:00:00 -05:00
17
+ date: 2011-03-18 00:00:00 -04:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency