nickstenning-outback 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/outback/manager.rb +15 -1
- data/lib/outback/shelltask.rb +1 -1
- data/lib/outback/yaml.rb +3 -6
- data/lib/outback.rb +1 -0
- data/outback.gemspec +1 -1
- data/spec/outback/manager_spec.rb +22 -7
- data/spec/outback/shelltask_spec.rb +6 -0
- data/spec/outback/yaml_spec.rb +4 -4
- metadata +1 -1
data/lib/outback/manager.rb
CHANGED
@@ -13,18 +13,32 @@ module Outback
|
|
13
13
|
|
14
14
|
def initialize
|
15
15
|
@tasks = []
|
16
|
+
@names = {}
|
16
17
|
@position = 0
|
17
18
|
end
|
18
19
|
|
19
20
|
def add_tasks( *tasks )
|
20
21
|
[*tasks].each do |task|
|
21
22
|
task.workdir = @workdir unless task.workdir
|
23
|
+
|
24
|
+
if task.name
|
25
|
+
if @names.has_key?(task.name)
|
26
|
+
raise DuplicateNamedTaskError, "Cannot add a named task more than once!"
|
27
|
+
else
|
28
|
+
@names[task.name] = @tasks.length
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
@tasks << task
|
22
33
|
end
|
23
|
-
@tasks += [*tasks]
|
24
34
|
end
|
25
35
|
|
26
36
|
alias_method :add_task, :add_tasks
|
27
37
|
|
38
|
+
def find_task( name )
|
39
|
+
@tasks[@names[name]]
|
40
|
+
end
|
41
|
+
|
28
42
|
def rollout!
|
29
43
|
@direction = ROLLOUT
|
30
44
|
run
|
data/lib/outback/shelltask.rb
CHANGED
data/lib/outback/yaml.rb
CHANGED
@@ -6,18 +6,15 @@ module Outback
|
|
6
6
|
manager = Manager.new
|
7
7
|
tasks = ::YAML.load(yaml_string)
|
8
8
|
tasks.each do |task|
|
9
|
+
task = [task['out'], task['back']]
|
9
10
|
manager.tasks << Outback::ShellTask.new(*task)
|
10
11
|
end
|
11
12
|
return manager
|
12
13
|
end
|
13
14
|
|
14
15
|
def self.load_file( yaml_file )
|
15
|
-
|
16
|
-
|
17
|
-
tasks.each do |task|
|
18
|
-
manager.tasks << Outback::ShellTask.new(*task)
|
19
|
-
end
|
20
|
-
return manager
|
16
|
+
yaml = File.read( yaml_file )
|
17
|
+
load( yaml )
|
21
18
|
end
|
22
19
|
|
23
20
|
end
|
data/lib/outback.rb
CHANGED
data/outback.gemspec
CHANGED
@@ -5,10 +5,9 @@ describe Outback::Manager do
|
|
5
5
|
|
6
6
|
before do
|
7
7
|
@obm = Outback::Manager.new
|
8
|
-
@task1 = mock("task1", :workdir => "/tmp")
|
9
|
-
@task2 = mock("task2", :workdir => nil)
|
10
|
-
@
|
11
|
-
@task2.stub!(:workdir=)
|
8
|
+
@task1 = mock("task1", :workdir => "/tmp", :name => "task1", :null_object => true)
|
9
|
+
@task2 = mock("task2", :workdir => nil, :name => nil, :null_object => true)
|
10
|
+
@task3 = mock("task3", :workdir => nil, :name => "task3", :null_object => true)
|
12
11
|
end
|
13
12
|
|
14
13
|
it "should have a list of tasks" do
|
@@ -24,13 +23,29 @@ describe Outback::Manager do
|
|
24
23
|
end
|
25
24
|
|
26
25
|
it "should add multiple tasks to its list, in order, with #add_tasks" do
|
27
|
-
@obm.add_tasks(@task1, @task2, @
|
26
|
+
@obm.add_tasks(@task1, @task2, @task3)
|
28
27
|
@obm.should have(3).tasks
|
29
28
|
@obm.tasks[0].should == @task1
|
30
29
|
@obm.tasks[1].should == @task2
|
31
|
-
@obm.tasks[2].should == @
|
30
|
+
@obm.tasks[2].should == @task3
|
32
31
|
end
|
33
|
-
|
32
|
+
|
33
|
+
it "should not allow more than one task with the same name" do
|
34
|
+
lambda { @obm.add_tasks(@task1, @task1) }.should raise_error(Outback::DuplicateNamedTaskError)
|
35
|
+
lambda { @obm.add_tasks(@task1, @task2, @task1) }.should raise_error(Outback::DuplicateNamedTaskError)
|
36
|
+
lambda { @obm.add_tasks(@task1, @task3, @task3) }.should raise_error(Outback::DuplicateNamedTaskError)
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should allow the same task twice if unnamed" do
|
40
|
+
lambda { @obm.add_tasks(@task1, @task2, @task2) }.should_not raise_error
|
41
|
+
end
|
42
|
+
|
43
|
+
it "should return the named task with #find_task(name)" do
|
44
|
+
@obm.add_tasks(@task1, @task2, @task3)
|
45
|
+
@obm.find_task('task1').should == @task1
|
46
|
+
@obm.find_task('task3').should == @task3
|
47
|
+
end
|
48
|
+
|
34
49
|
describe "(with a few tasks)" do
|
35
50
|
|
36
51
|
before do
|
@@ -6,6 +6,12 @@ describe Outback::ShellTask do
|
|
6
6
|
@task = Outback::ShellTask.new("out", "back")
|
7
7
|
end
|
8
8
|
|
9
|
+
it "should have an attr_accessor for @name" do
|
10
|
+
@task.name.should be_nil
|
11
|
+
@task.name = "Henry"
|
12
|
+
@task.name.should == "Henry"
|
13
|
+
end
|
14
|
+
|
9
15
|
it "should use the first parameter to the rollout command" do
|
10
16
|
@task.rollout.should == "out"
|
11
17
|
end
|
data/spec/outback/yaml_spec.rb
CHANGED
@@ -6,11 +6,11 @@ describe Outback::YAML do
|
|
6
6
|
before do
|
7
7
|
@yaml =<<-EOM.gsub(/^\s{4}/, '')
|
8
8
|
-
|
9
|
-
|
10
|
-
|
9
|
+
out: touch y
|
10
|
+
back: rm y
|
11
11
|
-
|
12
|
-
|
13
|
-
|
12
|
+
out: touch x
|
13
|
+
back: rm x
|
14
14
|
EOM
|
15
15
|
@file = '/tmp/outback_yaml_spec_tmp'
|
16
16
|
File.open(@file, 'w') { |f| f.puts @yaml }
|