diaspora-cluster-creator 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. data/.gitignore +1 -2
  2. data/Guardfile +1 -2
  3. data/README.md +2 -0
  4. data/TODO.todo +2 -0
  5. data/bin/diaspora-cluster +11 -8
  6. data/diaspora-cluster-creator.gemspec +2 -0
  7. data/features/cluster.feature +1 -1
  8. data/features/command_line.feature +165 -0
  9. data/features/node.feature +13 -0
  10. data/features/step_definitions/cluster_steps.rb +3 -3
  11. data/features/step_definitions/command_line_steps.rb +7 -0
  12. data/features/step_definitions/node_steps.rb +16 -0
  13. data/features/support/aruba.rb +1 -0
  14. data/features/support/world.rb +4 -8
  15. data/lib/diaspora-cluster-creator.rb +12 -9
  16. data/lib/diaspora-cluster-creator/attribute.rb +29 -0
  17. data/lib/diaspora-cluster-creator/attribute_collection_factory.rb +29 -0
  18. data/lib/diaspora-cluster-creator/cluster.rb +31 -18
  19. data/lib/diaspora-cluster-creator/edge_drawer.rb +41 -0
  20. data/lib/diaspora-cluster-creator/guarantor.rb +21 -0
  21. data/lib/diaspora-cluster-creator/node.rb +71 -0
  22. data/lib/diaspora-cluster-creator/node_attribute.rb +41 -0
  23. data/lib/diaspora-cluster-creator/node_collection_factory.rb +30 -0
  24. data/lib/diaspora-cluster-creator/template.rb +23 -16
  25. data/lib/diaspora-cluster-creator/version.rb +1 -1
  26. data/spec/diaspora-cluster-creator/attribute_collection_factory_spec.rb +31 -0
  27. data/spec/diaspora-cluster-creator/attribute_spec.rb +69 -0
  28. data/spec/diaspora-cluster-creator/cluster_spec.rb +66 -15
  29. data/spec/diaspora-cluster-creator/edge_drawer_spec.rb +21 -0
  30. data/spec/diaspora-cluster-creator/guarantor_spec.rb +54 -0
  31. data/spec/diaspora-cluster-creator/node_attribute_spec.rb +36 -0
  32. data/spec/diaspora-cluster-creator/node_collection_factory_spec.rb +27 -0
  33. data/spec/diaspora-cluster-creator/node_spec.rb +65 -0
  34. data/spec/diaspora-cluster-creator/template_integration_spec.rb +9 -10
  35. data/spec/diaspora-cluster-creator/template_spec.rb +9 -2
  36. metadata +78 -34
  37. data/features/star_system.feature +0 -13
  38. data/features/step_definitions/star_system_steps.rb +0 -16
  39. data/lib/diaspora-cluster-creator/graph.rb +0 -58
  40. data/lib/diaspora-cluster-creator/star_system.rb +0 -80
  41. data/spec/diaspora-cluster-creator/graph_spec.rb +0 -34
  42. data/spec/diaspora-cluster-creator/star_system_spec.rb +0 -103
@@ -0,0 +1,21 @@
1
+ require_relative '../spec_helper_lite'
2
+ require 'edge_drawer'
3
+
4
+ describe EdgeDrawer do
5
+ subject { EdgeDrawer.new(context)}
6
+ let(:context) { Object.new }
7
+
8
+ describe '#draw' do
9
+ it 'should return' do
10
+ nodes = ['a','b','c']
11
+ with_loaded_dice(0,subject) do
12
+ output = subject.draw(nodes)
13
+
14
+ output.must_include ['a','b']
15
+ output.must_include ['a','c']
16
+ output.must_include ['b','c']
17
+ output.size.must_equal 3
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,54 @@
1
+ require_relative '../spec_helper_lite'
2
+ require 'guarantor'
3
+
4
+ describe Node do
5
+ subject { Guarantor.new(attribute_name, minimum_value) }
6
+ let(:attribute_name) { 'shoe_size'}
7
+ let(:minimum_value) { 2 }
8
+ let(:mock_node) {
9
+ Class.new do
10
+ include Comparable
11
+ def initialize(value)
12
+ self.shoe_size = value
13
+ end
14
+ attr_accessor :shoe_size
15
+ def <=>(other)
16
+ shoe_size <=> other.shoe_size
17
+ end
18
+ end
19
+ }
20
+ describe '#guarantee! with defined attribute' do
21
+ it 'should adjust technology rating without altering the sort order' do
22
+ @node_a = mock_node.new(-1)
23
+ @node_b = mock_node.new(0)
24
+ @node_c = mock_node.new(1)
25
+ input = [@node_b, @node_c, @node_a]
26
+ subject.guarantee!(input).must_equal(input) # Don't change the order
27
+ @node_a.shoe_size.must_equal 2 # change the value
28
+ @node_b.shoe_size.must_equal 0
29
+ @node_c.shoe_size.must_equal 2
30
+ end
31
+
32
+ it 'should not adjust technology rating if one is already adequate' do
33
+ @node_a = mock_node.new(-2)
34
+ @node_b = mock_node.new(0)
35
+ @node_c = mock_node.new(3)
36
+ input = [@node_b, @node_c, @node_a]
37
+ subject.guarantee!(input).must_equal(input) # Don't change the order
38
+ @node_a.shoe_size.must_equal(-2) # not change the value
39
+ @node_b.shoe_size.must_equal 0
40
+ @node_c.shoe_size.must_equal 3
41
+ end
42
+ end
43
+ describe '#guarantee! without attribute' do
44
+ let(:attribute_name) { 'clearly_we_are_not_doing_this' }
45
+ it 'should fail gracefully if method is not defined' do
46
+ @node_a = mock_node.new(-2)
47
+ @node_b = mock_node.new(0)
48
+ @node_c = mock_node.new(3)
49
+ input = [@node_b, @node_c, @node_a]
50
+ subject.guarantee!(input).must_equal(input) # Don't change the order
51
+ end
52
+ end
53
+
54
+ end
@@ -0,0 +1,36 @@
1
+ require_relative '../spec_helper_lite'
2
+ require 'node_attribute'
3
+
4
+ describe NodeAttribute do
5
+ subject { NodeAttribute.new(node, attribute) }
6
+ let(:node) { Object.new }
7
+ let(:attribute) { Object.new }
8
+
9
+ describe '#to_s' do
10
+ it 'should incorporate attribute' do
11
+ with_loaded_dice(-4, subject) do
12
+ subject.to_s.must_equal "#{attribute}-4"
13
+ end
14
+ end
15
+ end
16
+
17
+ describe '#to_i' do
18
+ it 'should be the value' do
19
+ with_loaded_dice(4, subject) do
20
+ subject.to_i.must_equal 4
21
+ end
22
+ end
23
+ end
24
+
25
+ describe '#value' do
26
+ it 'should be the result of a roll' do
27
+ with_loaded_dice(4, subject) do
28
+ subject.value.must_equal 4
29
+ end
30
+ end
31
+ it 'should be overridable' do
32
+ subject.value = 2
33
+ subject.value.must_equal 2
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,27 @@
1
+ require_relative '../spec_helper_lite'
2
+ require 'node_collection_factory'
3
+
4
+ describe NodeCollectionFactory do
5
+ subject { NodeCollectionFactory.new(context) }
6
+ let(:context) { Object.new }
7
+
8
+ describe '#build_from(names)' do
9
+ it 'should build the nodes then verify them' do
10
+ list_of_names = ['a']
11
+ expected_output = ['node-a']
12
+
13
+ node_builder = MiniTest::Mock.new
14
+ node_builder.expect(:call, 'node-a', [context,'a'])
15
+
16
+ guarantor = MiniTest::Mock.new
17
+ guarantor.expect(:call, 'guaranteed!', [expected_output])
18
+
19
+ subject.node_guarantor = guarantor
20
+ subject.node_builder = node_builder
21
+
22
+ subject.build_from(list_of_names).must_equal(expected_output)
23
+ node_builder.verify
24
+ guarantor.verify
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,65 @@
1
+ require_relative '../spec_helper_lite'
2
+ require 'node'
3
+ require 'ostruct'
4
+
5
+ describe Node do
6
+ class MockAttribute
7
+ attr_accessor :value, :to_sym, :prefix
8
+ def to_i; value; end
9
+ def value
10
+ @value.to_i
11
+ end
12
+ end
13
+
14
+ let(:attribute_builder) { lambda {|node,attribute| attribute } }
15
+ let(:name) { 'Name' }
16
+ subject {
17
+ Node.new( cluster, name) do |node|
18
+ node.attribute_builder = attribute_builder
19
+ end
20
+ }
21
+ let(:cluster) {
22
+ Object.new.tap do |obj|
23
+ def obj.attributes
24
+ [
25
+ MockAttribute.new.tap{|obj| obj.to_sym = :technology; obj.prefix = 'T'; obj.value = 1},
26
+ MockAttribute.new.tap{|obj| obj.to_sym = :resources; obj.prefix = 'R'; obj.value = 1},
27
+ MockAttribute.new.tap{|obj| obj.to_sym = :environment; obj.prefix = 'E'; obj.value = 1},
28
+ ]
29
+ end
30
+ end
31
+ }
32
+ describe 'with attributes' do
33
+ let(:cluster) {
34
+ Object.new.tap do |obj|
35
+ def obj.attributes
36
+ [
37
+ MockAttribute.new.tap{|obj| obj.to_sym = :knights; obj.prefix = 'K'; obj.value = 1},
38
+ MockAttribute.new.tap{|obj| obj.to_sym = :dragons; obj.prefix = 'D'; obj.value = 2},
39
+ MockAttribute.new.tap{|obj| obj.to_sym = :maidens; obj.prefix = 'M'; obj.value = 3},
40
+ ]
41
+ end
42
+ end
43
+ }
44
+ it 'should have #knights method' do
45
+ subject.knights.must_equal 1
46
+ end
47
+
48
+ it 'should allow #knights to be set' do
49
+ subject.knights = 3
50
+ subject.knights.must_equal(3)
51
+ end
52
+ end
53
+
54
+ describe '#initialize with some attributes' do
55
+ let(:name) { "Sparta{T1 E-4}" }
56
+ it 'should have an extracted name' do
57
+ subject.name.must_equal 'Sparta'
58
+ end
59
+ it 'should have an preset attribute' do
60
+ subject.resources.must_equal 1
61
+ subject.technology.must_equal 1
62
+ subject.environment.must_equal -4
63
+ end
64
+ end
65
+ end
@@ -2,17 +2,16 @@ require_relative '../spec_helper_lite'
2
2
  require 'template'
3
3
 
4
4
  describe Template do
5
- describe '#to_dot' do
6
- it 'should remder star systems and their connections' do
7
- @names = ["Hello", "World", "Foo", "Bar"]
8
- @cluster = Cluster.new(@names)
9
- @graph = Graph.new(@cluster)
10
- @template = Template.new(@graph)
11
- @template.to_s.tap do |dot|
12
- @cluster.each do |system|
13
- dot.must_include(%([label = #{system.label.inspect}]))
5
+ subject { Template.new(cluster) }
6
+ let(:cluster) { Cluster.new(names) }
7
+ let(:names) { ["Hello", "World", "Foo", "Bar"] }
8
+ describe '#to_s' do
9
+ it 'should remder node systems and their connections' do
10
+ subject.to_s.tap do |dot|
11
+ cluster.nodes.each do |node|
12
+ dot.must_include(%([label = #{node.label.inspect}]))
14
13
  end
15
- @graph.edges.each do |edge|
14
+ cluster.edges.each do |edge|
16
15
  dot.must_match(/"?#{edge.first}"? -- "?#{edge.last}"?/)
17
16
  end
18
17
  end
@@ -5,8 +5,15 @@ describe Template do
5
5
  subject { Template.new(graph) }
6
6
  let(:graph) {
7
7
  object = Object.new
8
- def object.edges; [['a','b'],['a','c']]; end
9
- def object.nodes; ['a','b','c']; end
8
+ def object.each_node
9
+ yield('a')
10
+ yield('b')
11
+ yield('c')
12
+ end
13
+ def object.each_edge
14
+ yield(['a','b'])
15
+ yield(['a','c'])
16
+ end
10
17
  def object.to_s; "Custom Name"; end
11
18
  object
12
19
  }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: diaspora-cluster-creator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-04-12 00:00:00.000000000 Z
12
+ date: 2012-04-16 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: cucumber
16
- requirement: &2152337300 !ruby/object:Gem::Requirement
16
+ requirement: &2151894880 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *2152337300
24
+ version_requirements: *2151894880
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: bundler
27
- requirement: &2152336840 !ruby/object:Gem::Requirement
27
+ requirement: &2151894400 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *2152336840
35
+ version_requirements: *2151894400
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: minitest
38
- requirement: &2152336300 !ruby/object:Gem::Requirement
38
+ requirement: &2151893780 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *2152336300
46
+ version_requirements: *2151893780
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: guard
49
- requirement: &2152335700 !ruby/object:Gem::Requirement
49
+ requirement: &2151893300 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *2152335700
57
+ version_requirements: *2151893300
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: guard-minitest
60
- requirement: &2152335000 !ruby/object:Gem::Requirement
60
+ requirement: &2151892780 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: '0'
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *2152335000
68
+ version_requirements: *2151892780
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: guard-bundler
71
- requirement: &2152333700 !ruby/object:Gem::Requirement
71
+ requirement: &2151892140 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ! '>='
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: '0'
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *2152333700
79
+ version_requirements: *2151892140
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: guard-cucumber
82
- requirement: &2152332980 !ruby/object:Gem::Requirement
82
+ requirement: &2151891540 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ! '>='
@@ -87,10 +87,10 @@ dependencies:
87
87
  version: '0'
88
88
  type: :development
89
89
  prerelease: false
90
- version_requirements: *2152332980
90
+ version_requirements: *2151891540
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: growl
93
- requirement: &2152332540 !ruby/object:Gem::Requirement
93
+ requirement: &2151891000 !ruby/object:Gem::Requirement
94
94
  none: false
95
95
  requirements:
96
96
  - - ! '>='
@@ -98,10 +98,32 @@ dependencies:
98
98
  version: '0'
99
99
  type: :development
100
100
  prerelease: false
101
- version_requirements: *2152332540
101
+ version_requirements: *2151891000
102
+ - !ruby/object:Gem::Dependency
103
+ name: debugger
104
+ requirement: &2151890480 !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ type: :development
111
+ prerelease: false
112
+ version_requirements: *2151890480
113
+ - !ruby/object:Gem::Dependency
114
+ name: aruba
115
+ requirement: &2151889940 !ruby/object:Gem::Requirement
116
+ none: false
117
+ requirements:
118
+ - - ! '>='
119
+ - !ruby/object:Gem::Version
120
+ version: '0'
121
+ type: :development
122
+ prerelease: false
123
+ version_requirements: *2151889940
102
124
  - !ruby/object:Gem::Dependency
103
125
  name: ruby-graphviz
104
- requirement: &2152331640 !ruby/object:Gem::Requirement
126
+ requirement: &2151889460 !ruby/object:Gem::Requirement
105
127
  none: false
106
128
  requirements:
107
129
  - - ! '>='
@@ -109,10 +131,10 @@ dependencies:
109
131
  version: '0'
110
132
  type: :runtime
111
133
  prerelease: false
112
- version_requirements: *2152331640
134
+ version_requirements: *2151889460
113
135
  - !ruby/object:Gem::Dependency
114
136
  name: main
115
- requirement: &2152330880 !ruby/object:Gem::Requirement
137
+ requirement: &2151888940 !ruby/object:Gem::Requirement
116
138
  none: false
117
139
  requirements:
118
140
  - - ! '>='
@@ -120,10 +142,10 @@ dependencies:
120
142
  version: '0'
121
143
  type: :runtime
122
144
  prerelease: false
123
- version_requirements: *2152330880
145
+ version_requirements: *2151888940
124
146
  - !ruby/object:Gem::Dependency
125
147
  name: dependency_injector
126
- requirement: &2152330440 !ruby/object:Gem::Requirement
148
+ requirement: &2151888460 !ruby/object:Gem::Requirement
127
149
  none: false
128
150
  requirements:
129
151
  - - ! '>='
@@ -131,7 +153,7 @@ dependencies:
131
153
  version: '0'
132
154
  type: :runtime
133
155
  prerelease: false
134
- version_requirements: *2152330440
156
+ version_requirements: *2151888460
135
157
  description: Command-line utility to create Diaspora cluster
136
158
  email:
137
159
  - jeremy.n.friesen@gmail.com
@@ -147,29 +169,43 @@ files:
147
169
  - LICENSE
148
170
  - README.md
149
171
  - Rakefile
172
+ - TODO.todo
150
173
  - bin/diaspora-cluster
151
174
  - diaspora-cluster-creator.gemspec
152
175
  - features/cluster.feature
176
+ - features/command_line.feature
153
177
  - features/fate_dice.feature
154
- - features/star_system.feature
178
+ - features/node.feature
155
179
  - features/step_definitions/cluster_steps.rb
180
+ - features/step_definitions/command_line_steps.rb
156
181
  - features/step_definitions/fate_dice_steps.rb
157
- - features/step_definitions/star_system_steps.rb
182
+ - features/step_definitions/node_steps.rb
183
+ - features/support/aruba.rb
158
184
  - features/support/captures.rb
159
185
  - features/support/env.rb
160
186
  - features/support/minitest.rb
161
187
  - features/support/world.rb
162
188
  - lib/diaspora-cluster-creator.rb
189
+ - lib/diaspora-cluster-creator/attribute.rb
190
+ - lib/diaspora-cluster-creator/attribute_collection_factory.rb
163
191
  - lib/diaspora-cluster-creator/cluster.rb
192
+ - lib/diaspora-cluster-creator/edge_drawer.rb
164
193
  - lib/diaspora-cluster-creator/fate_dice.rb
165
- - lib/diaspora-cluster-creator/graph.rb
166
- - lib/diaspora-cluster-creator/star_system.rb
194
+ - lib/diaspora-cluster-creator/guarantor.rb
195
+ - lib/diaspora-cluster-creator/node.rb
196
+ - lib/diaspora-cluster-creator/node_attribute.rb
197
+ - lib/diaspora-cluster-creator/node_collection_factory.rb
167
198
  - lib/diaspora-cluster-creator/template.rb
168
199
  - lib/diaspora-cluster-creator/version.rb
200
+ - spec/diaspora-cluster-creator/attribute_collection_factory_spec.rb
201
+ - spec/diaspora-cluster-creator/attribute_spec.rb
169
202
  - spec/diaspora-cluster-creator/cluster_spec.rb
203
+ - spec/diaspora-cluster-creator/edge_drawer_spec.rb
170
204
  - spec/diaspora-cluster-creator/fate_dice_spec.rb
171
- - spec/diaspora-cluster-creator/graph_spec.rb
172
- - spec/diaspora-cluster-creator/star_system_spec.rb
205
+ - spec/diaspora-cluster-creator/guarantor_spec.rb
206
+ - spec/diaspora-cluster-creator/node_attribute_spec.rb
207
+ - spec/diaspora-cluster-creator/node_collection_factory_spec.rb
208
+ - spec/diaspora-cluster-creator/node_spec.rb
173
209
  - spec/diaspora-cluster-creator/template_integration_spec.rb
174
210
  - spec/diaspora-cluster-creator/template_spec.rb
175
211
  - spec/spec_helper_lite.rb
@@ -199,19 +235,27 @@ specification_version: 3
199
235
  summary: Command-line utility to create Diaspora cluster
200
236
  test_files:
201
237
  - features/cluster.feature
238
+ - features/command_line.feature
202
239
  - features/fate_dice.feature
203
- - features/star_system.feature
240
+ - features/node.feature
204
241
  - features/step_definitions/cluster_steps.rb
242
+ - features/step_definitions/command_line_steps.rb
205
243
  - features/step_definitions/fate_dice_steps.rb
206
- - features/step_definitions/star_system_steps.rb
244
+ - features/step_definitions/node_steps.rb
245
+ - features/support/aruba.rb
207
246
  - features/support/captures.rb
208
247
  - features/support/env.rb
209
248
  - features/support/minitest.rb
210
249
  - features/support/world.rb
250
+ - spec/diaspora-cluster-creator/attribute_collection_factory_spec.rb
251
+ - spec/diaspora-cluster-creator/attribute_spec.rb
211
252
  - spec/diaspora-cluster-creator/cluster_spec.rb
253
+ - spec/diaspora-cluster-creator/edge_drawer_spec.rb
212
254
  - spec/diaspora-cluster-creator/fate_dice_spec.rb
213
- - spec/diaspora-cluster-creator/graph_spec.rb
214
- - spec/diaspora-cluster-creator/star_system_spec.rb
255
+ - spec/diaspora-cluster-creator/guarantor_spec.rb
256
+ - spec/diaspora-cluster-creator/node_attribute_spec.rb
257
+ - spec/diaspora-cluster-creator/node_collection_factory_spec.rb
258
+ - spec/diaspora-cluster-creator/node_spec.rb
215
259
  - spec/diaspora-cluster-creator/template_integration_spec.rb
216
260
  - spec/diaspora-cluster-creator/template_spec.rb
217
261
  - spec/spec_helper_lite.rb