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
@@ -1,13 +0,0 @@
1
- Feature: Star System Creation
2
-
3
- Scenario: Star System Creation
4
- When I create a Star System
5
- Then it should have a technology rating
6
- And it should have a resources rating
7
- And it should have a environment rating
8
-
9
- Scenario: Named Star System Creation
10
- When I create a Star System with name "Sparta [T1 E-2 R3]"
11
- Then it should have a technology rating of 1
12
- And it should have a resources rating of 3
13
- And it should have a environment rating of -2
@@ -1,16 +0,0 @@
1
- When /^I create a Star System$/ do
2
- current_star_system
3
- end
4
-
5
- When /^I create a Star System with (?:the )?name "([^"]*)"$/ do |name|
6
- set_current_star_system(name)
7
- end
8
-
9
- Then /^it should have an? (#{CAPTURE_SYSTEM_ATTRIBUTE}) rating$/ do |system_attribute|
10
- current_star_system.send(system_attribute).must_be :<=, 4
11
- current_star_system.send(system_attribute).must_be :>=, -4
12
- end
13
-
14
- Then /^it should have an? (#{CAPTURE_SYSTEM_ATTRIBUTE}) rating of (#{CAPTURE_INTEGER})$/ do |system_attribute, rating|
15
- current_star_system.send(system_attribute).must_equal rating
16
- end
@@ -1,58 +0,0 @@
1
- require 'dependency_injector'
2
- require 'set'
3
- require_relative 'fate_dice'
4
-
5
- module Diaspora
6
- module Cluster
7
- module Creator
8
- class Graph
9
- extend DependencyInjector
10
- def_injector(:dice) { FateDice.new }
11
-
12
- attr_reader :source
13
- def initialize(source)
14
- @source = source
15
- end
16
-
17
- def to_s
18
- source.to_s
19
- end
20
-
21
- def nodes
22
- draw!
23
- @nodes
24
- end
25
-
26
- def edges
27
- draw!
28
- @edges
29
- end
30
-
31
- private
32
- def draw!
33
- return if @__drawn__
34
- @nodes = source.collect.to_a
35
- @nodes.each_with_index do |node, i|
36
- result = dice.roll
37
- if result < 0
38
- connect(node, @nodes[i+1])
39
- elsif result == 0
40
- connect(node, @nodes[i+1], @nodes[i+2])
41
- elsif result > 0
42
- connect(node, @nodes[i+1], @nodes[i+2], @nodes[i+3])
43
- end
44
- end
45
- @__drawn__ = true
46
- end
47
-
48
- def connect(node, *others)
49
- @edges ||= Set.new
50
-
51
- others.flatten.compact.each do |other|
52
- @edges << [node,other]
53
- end
54
- end
55
- end
56
- end
57
- end
58
- end
@@ -1,80 +0,0 @@
1
- require 'dependency_injector'
2
- require 'set'
3
- require_relative 'fate_dice'
4
-
5
- module Diaspora
6
- module Cluster
7
- module Creator
8
- class StarSystem
9
- def self.rolled_attributes
10
- unless defined?(@@rolled_attributes)
11
- @@rolled_attributes = Set.new
12
- end
13
- @@rolled_attributes
14
- end
15
- def self.rolled_attribute(attribute_name, abbreviation = nil)
16
- rolled_attributes << attribute_name.to_s
17
- define_method(attribute_name) do
18
- instance_variable_get("@#{attribute_name}") || instance_variable_set("@#{attribute_name}", dice.roll)
19
- instance_variable_get("@#{attribute_name}")
20
- end
21
- define_method("#{attribute_name}=") do |value|
22
- instance_variable_set("@#{attribute_name}", value.to_i)
23
- end
24
- end
25
- def self.guarantee!(star_systems)
26
- return star_systems if star_systems.detect {|ss| ss.technology >= 2 }
27
- working = star_systems.sort
28
- working.first.technology = 2
29
- working.last.technology = 2
30
- star_systems
31
- end
32
-
33
- extend DependencyInjector
34
- def_injector(:dice) { FateDice.new }
35
-
36
- attr_reader :context, :name
37
- def initialize(context, name)
38
- @context = context
39
- set_name(name.to_s)
40
- end
41
-
42
- rolled_attribute :technology, :t
43
- rolled_attribute :resources, :r
44
- rolled_attribute :environment, :e
45
-
46
- include Comparable
47
- def <=>(other)
48
- to_i <=> other.to_i
49
- end
50
-
51
- def to_i
52
- self.class.rolled_attributes.inject(0) {|m,v| m += send(v) }
53
- end
54
-
55
- def to_s
56
- name.to_s
57
- end
58
-
59
- def label
60
- "#{name}\nT#{technology} R#{resources} E#{environment}"
61
- end
62
-
63
- protected
64
- def set_name(name_with_attribtes)
65
- name, options = name_with_attribtes.strip.split(/ *\[/)
66
- @name = name
67
- if options
68
- options.sub(/\]$/,'').split.collect(&:strip).each do |option|
69
- original, attribute_prefix, value = option.match(/(\w) *(-?\d)/).to_a
70
- if attribute_name = self.class.rolled_attributes.detect {|roled_attribute| roled_attribute =~ /^#{attribute_prefix}/i}
71
- send("#{attribute_name}=",value)
72
- end
73
- end
74
- end
75
- @name
76
- end
77
- end
78
- end
79
- end
80
- end
@@ -1,34 +0,0 @@
1
- require_relative '../spec_helper_lite'
2
- require 'graph'
3
-
4
- describe Graph do
5
- subject { Graph.new(collection) }
6
- let(:collection) {[1,2,3]}
7
-
8
- describe '#nodes' do
9
- it 'should be the collection of the input' do
10
- subject.nodes.must_equal collection
11
- end
12
- end
13
-
14
- describe '#edges' do
15
- it 'connection for all -1 rolls' do
16
- expected = Set.new
17
- expected << [1,2]
18
- expected << [2,3]
19
- with_loaded_dice(-1, subject) do
20
- subject.edges.must_equal expected
21
- end
22
- end
23
-
24
- it 'connection for all -2 rolls' do
25
- expected = Set.new
26
- expected << [1,2]
27
- expected << [1,3]
28
- expected << [2,3]
29
- with_loaded_dice(0, subject) do
30
- subject.edges.must_equal expected
31
- end
32
- end
33
- end
34
- end
@@ -1,103 +0,0 @@
1
- require_relative '../spec_helper_lite'
2
- require 'star_system'
3
-
4
- describe StarSystem do
5
- subject { StarSystem.new( Object.new, 1 ) }
6
-
7
- describe '#initialize with one attribute' do
8
- subject { StarSystem.new(Object.new, "Sparta [T1 E-4]") }
9
- it 'should have an extracted name' do
10
- subject.name.must_equal 'Sparta'
11
- end
12
- it 'should have an preset attribute' do
13
- with_loaded_dice(0, subject) do
14
- subject.resources.must_equal 0
15
- subject.technology.must_equal 1
16
- subject.environment.must_equal -4
17
- end
18
- end
19
- end
20
-
21
- describe '#technology=' do
22
- it 'should be overridable' do
23
- subject.technology = 3
24
- subject.technology.must_equal 3
25
- end
26
- end
27
-
28
- describe '#technology' do
29
- it 'should be randomly rolled' do
30
- with_loaded_dice(1, subject) do
31
- subject.technology.must_equal 1
32
- end
33
- end
34
- end
35
-
36
- describe '#resources' do
37
- it 'should be randomly rolled' do
38
- with_loaded_dice(1, subject) do
39
- subject.resources.must_equal 1
40
- end
41
- end
42
- end
43
-
44
- describe '#environment' do
45
- it 'should be randomly rolled' do
46
- with_loaded_dice(1, subject) do
47
- subject.environment.must_equal 1
48
- end
49
- end
50
- end
51
-
52
- describe '#<=>' do
53
- it 'should be comparable to another star system' do
54
- @system_a = StarSystem.new('', 1)
55
- @system_b = StarSystem.new('', 2)
56
- with_loaded_dice(2, @system_a) do
57
- with_loaded_dice(1, @system_b) do
58
- @system_b.must_be :<, @system_a
59
- end
60
- end
61
- end
62
- end
63
-
64
- describe '.guarantee!' do
65
- it 'should adjust technology rating without altering the sort order' do
66
- @system_a = StarSystem.new('', 1)
67
- @system_b = StarSystem.new('', 2)
68
- @system_c = StarSystem.new('', 3)
69
- order =
70
- with_loaded_dice(1, @system_a) do
71
- with_loaded_dice(0, @system_b) do
72
- with_loaded_dice(-1, @system_c) do
73
- input = [@system_b, @system_c, @system_a]
74
- StarSystem.guarantee!(input).must_equal input
75
- end
76
- end
77
- end
78
-
79
- @system_a.technology.must_equal 2
80
- @system_b.technology.must_equal 0
81
- @system_c.technology.must_equal 2
82
- end
83
-
84
- it 'should not adjust technology rating if one is already adequate' do
85
- @system_a = StarSystem.new('', 1)
86
- @system_b = StarSystem.new('', 2)
87
- @system_c = StarSystem.new('', 3)
88
- order =
89
- with_loaded_dice(2, @system_a) do
90
- with_loaded_dice(0, @system_b) do
91
- with_loaded_dice(-1, @system_c) do
92
- input = [@system_b, @system_c, @system_a]
93
- StarSystem.guarantee!(input).must_equal input
94
- end
95
- end
96
- end
97
-
98
- @system_a.technology.must_equal 2
99
- @system_b.technology.must_equal 0
100
- @system_c.technology.must_equal(-1)
101
- end
102
- end
103
- end