compo 0.3.1 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (59) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +8 -0
  3. data/lib/compo/branches/array.rb +17 -0
  4. data/lib/compo/branches/branch.rb +35 -0
  5. data/lib/compo/branches/constant.rb +34 -0
  6. data/lib/compo/branches/hash.rb +17 -0
  7. data/lib/compo/branches/leaf.rb +15 -0
  8. data/lib/compo/branches.rb +15 -0
  9. data/lib/compo/composites/array.rb +105 -0
  10. data/lib/compo/composites/composite.rb +183 -0
  11. data/lib/compo/composites/hash.rb +72 -0
  12. data/lib/compo/composites/leaf.rb +64 -0
  13. data/lib/compo/composites/parentless.rb +133 -0
  14. data/lib/compo/composites.rb +20 -0
  15. data/lib/compo/finders/url.rb +166 -0
  16. data/lib/compo/finders.rb +10 -0
  17. data/lib/compo/mixins/movable.rb +55 -0
  18. data/lib/compo/mixins/parent_tracker.rb +74 -0
  19. data/lib/compo/mixins/url_referenceable.rb +70 -0
  20. data/lib/compo/mixins.rb +9 -0
  21. data/lib/compo/version.rb +1 -1
  22. data/lib/compo.rb +4 -21
  23. data/spec/array_branch_spec.rb +4 -2
  24. data/spec/array_composite_shared_examples.rb +2 -2
  25. data/spec/array_composite_spec.rb +1 -1
  26. data/spec/branch_shared_examples.rb +38 -5
  27. data/spec/branch_spec.rb +1 -1
  28. data/spec/composite_shared_examples.rb +1 -1
  29. data/spec/composite_spec.rb +1 -1
  30. data/spec/constant_branch_spec.rb +18 -0
  31. data/spec/hash_branch_spec.rb +4 -2
  32. data/spec/hash_composite_shared_examples.rb +3 -3
  33. data/spec/hash_composite_spec.rb +1 -1
  34. data/spec/leaf_branch_spec.rb +9 -0
  35. data/spec/{null_composite_shared_examples.rb → leaf_composite_shared_examples.rb} +1 -1
  36. data/spec/leaf_composite_spec.rb +7 -0
  37. data/spec/movable_shared_examples.rb +3 -3
  38. data/spec/movable_spec.rb +1 -1
  39. data/spec/parent_tracker_spec.rb +2 -15
  40. data/spec/parentless_spec.rb +2 -2
  41. data/spec/url_finder_shared_examples.rb +104 -0
  42. data/spec/url_finder_spec.rb +25 -114
  43. data/spec/url_referenceable_spec.rb +1 -1
  44. metadata +30 -21
  45. data/lib/compo/array_branch.rb +0 -16
  46. data/lib/compo/array_composite.rb +0 -103
  47. data/lib/compo/branch.rb +0 -18
  48. data/lib/compo/composite.rb +0 -181
  49. data/lib/compo/hash_branch.rb +0 -17
  50. data/lib/compo/hash_composite.rb +0 -70
  51. data/lib/compo/leaf.rb +0 -14
  52. data/lib/compo/movable.rb +0 -53
  53. data/lib/compo/null_composite.rb +0 -62
  54. data/lib/compo/parent_tracker.rb +0 -80
  55. data/lib/compo/parentless.rb +0 -131
  56. data/lib/compo/url_finder.rb +0 -164
  57. data/lib/compo/url_referenceable.rb +0 -68
  58. data/spec/leaf_spec.rb +0 -9
  59. data/spec/null_composite_spec.rb +0 -7
data/spec/branch_spec.rb CHANGED
@@ -4,7 +4,7 @@ require 'branch_shared_examples'
4
4
 
5
5
  # Mock implementation of a Branch
6
6
  class MockBranch
7
- include Compo::Branch
7
+ include Compo::Branches::Branch
8
8
  end
9
9
 
10
10
  describe MockBranch do
@@ -3,7 +3,7 @@ require 'compo'
3
3
  shared_examples 'a removal of a child from its parent' do
4
4
  it 'calls #update_parent on the child with a Parentless' do
5
5
  expect(child).to receive(:update_parent).once do |parent, _|
6
- expect(parent).to be_a(Compo::Parentless)
6
+ expect(parent).to be_a(Compo::Composites::Parentless)
7
7
  end
8
8
  op.call
9
9
  end
@@ -4,7 +4,7 @@ require 'composite_shared_examples'
4
4
 
5
5
  # Mock implementation of a Composite
6
6
  class MockComposite
7
- include Compo::Composite
7
+ include Compo::Composites::Composite
8
8
  end
9
9
 
10
10
  describe MockComposite do
@@ -0,0 +1,18 @@
1
+ require 'spec_helper'
2
+ require 'compo'
3
+ require 'branch_shared_examples'
4
+ require 'leaf_composite_shared_examples'
5
+
6
+ describe Compo::Branches::Constant do
7
+ let(:value) { 3.141592653 }
8
+ subject { Compo::Branches::Constant.new(value) }
9
+
10
+ it_behaves_like 'a branch'
11
+ it_behaves_like 'a leaf composite'
12
+
13
+ describe '#value' do
14
+ it 'returns the constant value' do
15
+ expect(subject.value).to eq(value)
16
+ end
17
+ end
18
+ end
@@ -3,7 +3,9 @@ require 'compo'
3
3
  require 'branch_shared_examples'
4
4
  require 'hash_composite_shared_examples'
5
5
 
6
- describe Compo::HashBranch do
7
- it_behaves_like 'a branch'
6
+ describe Compo::Branches::Hash do
7
+ it_behaves_like 'a branch with children' do
8
+ let(:initial_ids) { %w(a b) }
9
+ end
8
10
  it_behaves_like 'a hash composite'
9
11
  end
@@ -38,7 +38,7 @@ shared_examples 'a hash composite' do
38
38
 
39
39
  it 'calls #update_parent on the old child with a Parentless' do
40
40
  expect(child1).to receive(:update_parent).once do |parent, _|
41
- expect(parent).to be_a(Compo::Parentless)
41
+ expect(parent).to be_a(Compo::Composites::Parentless)
42
42
  end
43
43
  subject.add(:a, child2)
44
44
  end
@@ -91,7 +91,7 @@ shared_examples 'a hash composite' do
91
91
 
92
92
  it 'calls #update_parent on the child with a Parentless' do
93
93
  expect(child1).to receive(:update_parent).once do |parent, _|
94
- expect(parent).to be_a(Compo::Parentless)
94
+ expect(parent).to be_a(Compo::Composites::Parentless)
95
95
  end
96
96
  subject.remove(child1)
97
97
  end
@@ -139,7 +139,7 @@ shared_examples 'a hash composite' do
139
139
 
140
140
  it 'calls #update_parent on the child with a Parentless' do
141
141
  expect(child1).to receive(:update_parent).once do |parent, _|
142
- expect(parent).to be_a(Compo::Parentless)
142
+ expect(parent).to be_a(Compo::Composites::Parentless)
143
143
  end
144
144
  subject.remove_id(:a)
145
145
  end
@@ -2,6 +2,6 @@ require 'spec_helper'
2
2
  require 'compo'
3
3
  require 'hash_composite_shared_examples'
4
4
 
5
- describe Compo::HashComposite do
5
+ describe Compo::Composites::Hash do
6
6
  it_behaves_like 'a hash composite'
7
7
  end
@@ -0,0 +1,9 @@
1
+ require 'spec_helper'
2
+ require 'compo'
3
+ require 'branch_shared_examples'
4
+ require 'leaf_composite_shared_examples'
5
+
6
+ describe Compo::Branches::Leaf do
7
+ it_behaves_like 'a branch'
8
+ it_behaves_like 'a leaf composite'
9
+ end
@@ -1,6 +1,6 @@
1
1
  require 'composite_shared_examples'
2
2
 
3
- shared_examples 'a null composite' do
3
+ shared_examples 'a leaf composite' do
4
4
  it_behaves_like 'a composite'
5
5
 
6
6
  let(:child1) { double(:child1) }
@@ -0,0 +1,7 @@
1
+ require 'spec_helper'
2
+ require 'compo'
3
+ require 'leaf_composite_shared_examples'
4
+
5
+ describe Compo::Composites::Leaf do
6
+ it_behaves_like 'a leaf composite'
7
+ end
@@ -46,7 +46,7 @@ shared_examples 'a movable object' do
46
46
  let(:new_parent) { nil }
47
47
 
48
48
  context 'and the Movable has no parent' do
49
- let(:old_parent) { Compo::Parentless.new }
49
+ let(:old_parent) { Compo::Composites::Parentless.new }
50
50
 
51
51
  it_behaves_like 'a normal call to #move_to' do
52
52
  let(:to) { new_parent }
@@ -69,7 +69,7 @@ shared_examples 'a movable object' do
69
69
  let(:add_result) { nil }
70
70
 
71
71
  context 'and the Movable has no parent' do
72
- let(:old_parent) { Compo::Parentless.new }
72
+ let(:old_parent) { Compo::Composites::Parentless.new }
73
73
 
74
74
  it_behaves_like 'a normal call to #move_to' do
75
75
  let(:to) { new_parent }
@@ -111,7 +111,7 @@ shared_examples 'a movable object' do
111
111
 
112
112
  context 'when the receiving parent allows the Movable to be added' do
113
113
  context 'and the Movable has no parent' do
114
- let(:old_parent) { Compo::Parentless.new }
114
+ let(:old_parent) { Compo::Composites::Parentless.new }
115
115
 
116
116
  it_behaves_like 'a normal call to #move_to' do
117
117
  let(:to) { new_parent }
data/spec/movable_spec.rb CHANGED
@@ -4,7 +4,7 @@ require 'movable_shared_examples'
4
4
 
5
5
  # Mock implementation of a Movable
6
6
  class MockMovable
7
- include Compo::Movable
7
+ include Compo::Mixins::Movable
8
8
  end
9
9
 
10
10
  describe MockMovable do
@@ -3,14 +3,13 @@ require 'compo'
3
3
 
4
4
  # Mock implementation of a ParentTracker
5
5
  class MockParentTracker
6
- include Compo::ParentTracker
6
+ include Compo::Mixins::ParentTracker
7
7
 
8
8
  # Initialises a MockParentTracker
9
9
  #
10
10
  # @api private
11
11
  def initialize(parent, id_function)
12
- @parent = parent
13
- @id_function = id_function
12
+ update_parent(parent, id_function)
14
13
  end
15
14
  end
16
15
 
@@ -51,16 +50,4 @@ describe MockParentTracker do
51
50
  expect(subject.id).to eq(:new_id)
52
51
  end
53
52
  end
54
-
55
- describe '#remove_parent' do
56
- it 'sets the parent to an instance of Parentless' do
57
- subject.remove_parent
58
- expect(subject.parent).to be_a(Compo::Parentless)
59
- end
60
-
61
- it 'sets the ID function to one returning nil' do
62
- subject.remove_parent
63
- expect(subject.id).to be_nil
64
- end
65
- end
66
53
  end
@@ -1,7 +1,7 @@
1
1
  require 'spec_helper'
2
2
  require 'compo'
3
3
 
4
- describe Compo::Parentless do
4
+ describe Compo::Composites::Parentless do
5
5
  let(:child) { double(:child) }
6
6
 
7
7
  describe '#add' do
@@ -13,7 +13,7 @@ describe Compo::Parentless do
13
13
 
14
14
  it 'calls #update_parent on the child with a Parentless' do
15
15
  expect(child).to receive(:update_parent).once do |parent, _|
16
- expect(parent).to be_a(Compo::Parentless)
16
+ expect(parent).to be_a(Compo::Composites::Parentless)
17
17
  end
18
18
  subject.add(:id, child)
19
19
  end
@@ -0,0 +1,104 @@
1
+ require 'compo'
2
+
3
+ shared_examples 'a URL finding' do
4
+ let(:target) { Compo::Branches::Leaf.new }
5
+
6
+ context 'when given a nil URL' do
7
+ specify { expect { |b| proc.call(nil, &b) }.to raise_error }
8
+ end
9
+
10
+ shared_examples 'a successful finding' do
11
+ it 'returns the correct resource' do
12
+ expect { |b| proc.call(url, &b) }.to yield_with_args(target)
13
+ end
14
+ end
15
+
16
+ shared_examples 'an unsuccessful finding' do
17
+ specify do
18
+ expect { |b| proc.call(url, &b) }.to raise_error(
19
+ "Could not find resource: #{url}"
20
+ )
21
+ end
22
+ end
23
+
24
+ shared_examples 'an unsuccessful finding with custom error' do
25
+ specify do
26
+ mp = ->(_) { :a }
27
+ expect { |b| proc.call(url, missing_proc: mp, &b) }
28
+ .to yield_with_args(:a)
29
+ end
30
+ end
31
+
32
+ context 'when given a correct root but incorrect URL' do
33
+ context 'using the default missing resource handler' do
34
+ context 'when the URL has a leading slash' do
35
+ it_behaves_like 'an unsuccessful finding' do
36
+ let(:url) { "/#{incorrect_url}" }
37
+ end
38
+ end
39
+ context 'when the URL has a trailing slash' do
40
+ it_behaves_like 'an unsuccessful finding' do
41
+ let(:url) { "#{incorrect_url}/" }
42
+ end
43
+ end
44
+ context 'when the URL has a leading and trailing slash' do
45
+ it_behaves_like 'an unsuccessful finding' do
46
+ let(:url) { "/#{incorrect_url}/" }
47
+ end
48
+ end
49
+ context 'when the URL has neither leading nor trailing slash' do
50
+ it_behaves_like 'an unsuccessful finding' do
51
+ let(:url) { "#{incorrect_url}" }
52
+ end
53
+ end
54
+ end
55
+
56
+ context 'using a custom error handler' do
57
+ context 'when the URL has a leading slash' do
58
+ it_behaves_like 'an unsuccessful finding with custom error' do
59
+ let(:url) { "/#{incorrect_url}" }
60
+ end
61
+ end
62
+ context 'when the URL has a trailing slash' do
63
+ it_behaves_like 'an unsuccessful finding with custom error' do
64
+ let(:url) { "#{incorrect_url}/" }
65
+ end
66
+ end
67
+ context 'when the URL has a leading and trailing slash' do
68
+ it_behaves_like 'an unsuccessful finding with custom error' do
69
+ let(:url) { "/#{incorrect_url}/" }
70
+ end
71
+ end
72
+ context 'when the URL has neither leading nor trailing slash' do
73
+ it_behaves_like 'an unsuccessful finding with custom error' do
74
+ let(:url) { "#{incorrect_url}" }
75
+ end
76
+ end
77
+ end
78
+ end
79
+
80
+ context 'when given a correct root and URL' do
81
+ context 'when the URL leads to a resource' do
82
+ context 'when the URL has a leading slash' do
83
+ it_behaves_like 'a successful finding' do
84
+ let(:url) { "/#{correct_url}" }
85
+ end
86
+ end
87
+ context 'when the URL has a trailing slash' do
88
+ it_behaves_like 'a successful finding' do
89
+ let(:url) { "#{correct_url}/" }
90
+ end
91
+ end
92
+ context 'when the URL has a leading and trailing slash' do
93
+ it_behaves_like 'a successful finding' do
94
+ let(:url) { "/#{correct_url}/" }
95
+ end
96
+ end
97
+ context 'when the URL has neither leading nor trailing slash' do
98
+ it_behaves_like 'a successful finding' do
99
+ let(:url) { "#{correct_url}" }
100
+ end
101
+ end
102
+ end
103
+ end
104
+ end
@@ -1,128 +1,39 @@
1
1
  require 'spec_helper'
2
2
  require 'compo'
3
+ require 'url_finder_shared_examples'
3
4
 
4
- describe Compo::UrlFinder do
5
- subject { Compo::UrlFinder }
5
+ describe Compo::Finders::Url do
6
+ subject { Compo::Finders::Url }
6
7
  describe '.find' do
7
- let(:target) { Compo::Leaf.new }
8
-
9
- let(:root) do
10
- s = Compo::HashBranch.new
11
- a = Compo::HashBranch.new
12
- b = Compo::ArrayBranch.new
13
- d = Compo::Leaf.new
14
- e = Compo::Leaf.new
15
- zero = Compo::Leaf.new
16
-
17
- s.add('a', a)
18
- a.add('b', b)
19
- b.add(0, zero)
20
- b.add(1, target)
21
- s.add('d', d)
22
- a.add('e', e)
23
- s
24
- end
25
-
26
8
  context 'when given a nil root' do
27
9
  specify { expect { |b| subject.find(nil, 'a/b/1', &b) }.to raise_error }
28
10
  end
29
11
 
30
- context 'when given a nil URL' do
31
- specify { expect { |b| subject.find(root, nil, &b) }.to raise_error }
32
- end
33
-
34
- shared_examples 'a successful finding' do
35
- it 'returns the correct resource' do
36
- expect { |b| subject.find(root, url, &b) }.to yield_with_args(target)
12
+ it_behaves_like 'a URL finding' do
13
+ let(:target) { Compo::Branches::Leaf.new }
14
+
15
+ let(:root) do
16
+ s = Compo::Branches::Hash.new
17
+ a = Compo::Branches::Hash.new
18
+ b = Compo::Branches::Array.new
19
+ d = Compo::Branches::Leaf.new
20
+ e = Compo::Branches::Leaf.new
21
+ zero = Compo::Branches::Leaf.new
22
+
23
+ s.add('a', a)
24
+ a.add('b', b)
25
+ b.add(0, zero)
26
+ b.add(1, target)
27
+ s.add('d', d)
28
+ a.add('e', e)
29
+ s
37
30
  end
38
- end
39
31
 
40
- shared_examples 'an unsuccessful finding' do
41
- specify do
42
- expect { |b| subject.find(root, url, &b) }.to raise_error(
43
- "Could not find resource: #{url}"
44
- )
45
- end
46
- end
47
-
48
- shared_examples 'an unsuccessful finding with custom error' do
49
- specify do
50
- mp = ->(_) { :a }
51
- expect { |b| subject.find(root, url, missing_proc: mp, &b) }
52
- .to yield_with_args(:a)
53
- end
54
- end
55
-
56
- context 'when given a correct root but incorrect URL' do
57
- context 'using the default missing resource handler' do
58
- context 'when the URL has a leading slash' do
59
- it_behaves_like 'an unsuccessful finding' do
60
- let(:url) { '/a/z' }
61
- end
62
- end
63
- context 'when the URL has a trailing slash' do
64
- it_behaves_like 'an unsuccessful finding' do
65
- let(:url) { 'a/z/' }
66
- end
67
- end
68
- context 'when the URL has a leading and trailing slash' do
69
- it_behaves_like 'an unsuccessful finding' do
70
- let(:url) { '/a/z/' }
71
- end
72
- end
73
- context 'when the URL has neither leading nor trailing slash' do
74
- it_behaves_like 'an unsuccessful finding' do
75
- let(:url) { 'a/z' }
76
- end
77
- end
78
- end
79
-
80
- context 'using a custom error handler' do
81
- context 'when the URL has a leading slash' do
82
- it_behaves_like 'an unsuccessful finding with custom error' do
83
- let(:url) { '/d/e/d' }
84
- end
85
- end
86
- context 'when the URL has a trailing slash' do
87
- it_behaves_like 'an unsuccessful finding with custom error' do
88
- let(:url) { 'd/e/d/' }
89
- end
90
- end
91
- context 'when the URL has a leading and trailing slash' do
92
- it_behaves_like 'an unsuccessful finding with custom error' do
93
- let(:url) { '/d/e/d/' }
94
- end
95
- end
96
- context 'when the URL has neither leading nor trailing slash' do
97
- it_behaves_like 'an unsuccessful finding with custom error' do
98
- let(:url) { 'd/e/d' }
99
- end
100
- end
101
- end
102
- end
32
+ let(:correct_url) { 'a/b/1' }
33
+ let(:incorrect_url) { 'a/z/1' }
103
34
 
104
- context 'when given a correct root and URL' do
105
- context 'when the URL leads to a resource' do
106
- context 'when the URL has a leading slash' do
107
- it_behaves_like 'a successful finding' do
108
- let(:url) { '/a/b/1' }
109
- end
110
- end
111
- context 'when the URL has a trailing slash' do
112
- it_behaves_like 'a successful finding' do
113
- let(:url) { 'a/b/1/' }
114
- end
115
- end
116
- context 'when the URL has a leading and trailing slash' do
117
- it_behaves_like 'a successful finding' do
118
- let(:url) { '/a/b/1/' }
119
- end
120
- end
121
- context 'when the URL has neither leading nor trailing slash' do
122
- it_behaves_like 'a successful finding' do
123
- let(:url) { 'a/b/1' }
124
- end
125
- end
35
+ let(:proc) do
36
+ ->(*args, &b) { Compo::Finders::Url.find(root, *args, &b) }
126
37
  end
127
38
  end
128
39
  end
@@ -4,7 +4,7 @@ require 'url_referenceable_shared_examples'
4
4
 
5
5
  # Mock implementation of UrlReferenceable.
6
6
  class MockUrlReferenceable
7
- include Compo::UrlReferenceable
7
+ include Compo::Mixins::UrlReferenceable
8
8
  end
9
9
 
10
10
  describe MockUrlReferenceable do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: compo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matt Windsor
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-05-21 00:00:00.000000000 Z
11
+ date: 2014-05-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: backports
@@ -140,19 +140,24 @@ files:
140
140
  - Rakefile
141
141
  - compo.gemspec
142
142
  - lib/compo.rb
143
- - lib/compo/array_branch.rb
144
- - lib/compo/array_composite.rb
145
- - lib/compo/branch.rb
146
- - lib/compo/composite.rb
147
- - lib/compo/hash_branch.rb
148
- - lib/compo/hash_composite.rb
149
- - lib/compo/leaf.rb
150
- - lib/compo/movable.rb
151
- - lib/compo/null_composite.rb
152
- - lib/compo/parent_tracker.rb
153
- - lib/compo/parentless.rb
154
- - lib/compo/url_finder.rb
155
- - lib/compo/url_referenceable.rb
143
+ - lib/compo/branches.rb
144
+ - lib/compo/branches/array.rb
145
+ - lib/compo/branches/branch.rb
146
+ - lib/compo/branches/constant.rb
147
+ - lib/compo/branches/hash.rb
148
+ - lib/compo/branches/leaf.rb
149
+ - lib/compo/composites.rb
150
+ - lib/compo/composites/array.rb
151
+ - lib/compo/composites/composite.rb
152
+ - lib/compo/composites/hash.rb
153
+ - lib/compo/composites/leaf.rb
154
+ - lib/compo/composites/parentless.rb
155
+ - lib/compo/finders.rb
156
+ - lib/compo/finders/url.rb
157
+ - lib/compo/mixins.rb
158
+ - lib/compo/mixins/movable.rb
159
+ - lib/compo/mixins/parent_tracker.rb
160
+ - lib/compo/mixins/url_referenceable.rb
156
161
  - lib/compo/version.rb
157
162
  - spec/array_branch_spec.rb
158
163
  - spec/array_composite_shared_examples.rb
@@ -161,17 +166,19 @@ files:
161
166
  - spec/branch_spec.rb
162
167
  - spec/composite_shared_examples.rb
163
168
  - spec/composite_spec.rb
169
+ - spec/constant_branch_spec.rb
164
170
  - spec/hash_branch_spec.rb
165
171
  - spec/hash_composite_shared_examples.rb
166
172
  - spec/hash_composite_spec.rb
167
- - spec/leaf_spec.rb
173
+ - spec/leaf_branch_spec.rb
174
+ - spec/leaf_composite_shared_examples.rb
175
+ - spec/leaf_composite_spec.rb
168
176
  - spec/movable_shared_examples.rb
169
177
  - spec/movable_spec.rb
170
- - spec/null_composite_shared_examples.rb
171
- - spec/null_composite_spec.rb
172
178
  - spec/parent_tracker_spec.rb
173
179
  - spec/parentless_spec.rb
174
180
  - spec/spec_helper.rb
181
+ - spec/url_finder_shared_examples.rb
175
182
  - spec/url_finder_spec.rb
176
183
  - spec/url_referenceable_shared_examples.rb
177
184
  - spec/url_referenceable_spec.rb
@@ -207,17 +214,19 @@ test_files:
207
214
  - spec/branch_spec.rb
208
215
  - spec/composite_shared_examples.rb
209
216
  - spec/composite_spec.rb
217
+ - spec/constant_branch_spec.rb
210
218
  - spec/hash_branch_spec.rb
211
219
  - spec/hash_composite_shared_examples.rb
212
220
  - spec/hash_composite_spec.rb
213
- - spec/leaf_spec.rb
221
+ - spec/leaf_branch_spec.rb
222
+ - spec/leaf_composite_shared_examples.rb
223
+ - spec/leaf_composite_spec.rb
214
224
  - spec/movable_shared_examples.rb
215
225
  - spec/movable_spec.rb
216
- - spec/null_composite_shared_examples.rb
217
- - spec/null_composite_spec.rb
218
226
  - spec/parent_tracker_spec.rb
219
227
  - spec/parentless_spec.rb
220
228
  - spec/spec_helper.rb
229
+ - spec/url_finder_shared_examples.rb
221
230
  - spec/url_finder_spec.rb
222
231
  - spec/url_referenceable_shared_examples.rb
223
232
  - spec/url_referenceable_spec.rb
@@ -1,16 +0,0 @@
1
- require 'compo/branch'
2
-
3
- module Compo
4
- # A simple implementation of a branch, whose children are stored in an Array
5
- #
6
- # An ArrayBranch is a composite object that may be moved into other composite
7
- # objects. It stores its children as an Array, and the ID of each child is
8
- # its current index in the array. Inserting and removing items into the
9
- # ArrayBranch may change the IDs of items with higher indices in the array.
10
- #
11
- # This is an extension of ArrayComposite to include the Movable and
12
- # ParentTracker mixins.
13
- class ArrayBranch < ArrayComposite
14
- include Branch
15
- end
16
- end