blazing 0.0.6 → 0.0.7
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.
- data/Gemfile +5 -3
- data/Gemfile.lock +27 -26
- data/README.md +3 -1
- data/Rakefile +3 -0
- data/lib/blazing.rb +3 -1
- data/lib/blazing/cli/base.rb +32 -14
- data/lib/blazing/cli/create.rb +11 -2
- data/lib/blazing/cli/hook.rb +7 -5
- data/lib/blazing/config.rb +7 -7
- data/lib/blazing/logger.rb +13 -106
- data/lib/blazing/recipe.rb +4 -11
- data/lib/blazing/recipes/bundler_recipe.rb +2 -0
- data/lib/blazing/recipes/rvm_recipe.rb +2 -0
- data/lib/blazing/remote.rb +50 -45
- data/lib/blazing/runner.rb +5 -0
- data/lib/blazing/target.rb +55 -23
- data/lib/blazing/version.rb +1 -1
- data/spec/blazing/cli/base_spec.rb +102 -0
- data/spec/blazing/cli/create_spec.rb +26 -0
- data/spec/blazing/cli/hook_spec.rb +16 -0
- data/spec/blazing/config_spec.rb +82 -0
- data/spec/blazing/logger_spec.rb +50 -0
- data/spec/blazing/recipe_spec.rb +13 -8
- data/spec/blazing/recipes/bundler_recipe_spec.rb +6 -0
- data/spec/blazing/recipes/passenger_recipe_spec.rb +6 -0
- data/spec/blazing/recipes/rvm_recipe_spec.rb +6 -0
- data/spec/blazing/remote_spec.rb +126 -3
- data/spec/blazing/runner_spec.rb +9 -0
- data/spec/blazing/target_spec.rb +110 -0
- data/spec/spec_helper.rb +7 -3
- data/spec/support/config.rb +0 -0
- metadata +25 -3
- data/index.html +0 -111
@@ -0,0 +1,50 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'blazing/logger'
|
3
|
+
require 'blazing/object'
|
4
|
+
|
5
|
+
describe Blazing::Logger do
|
6
|
+
|
7
|
+
before :each do
|
8
|
+
@output = double
|
9
|
+
@logger = Blazing::Logger.new(@output)
|
10
|
+
end
|
11
|
+
|
12
|
+
context 'message logger' do
|
13
|
+
it 'saves the message within the logging class' do
|
14
|
+
@logger.log :info, 'something'
|
15
|
+
@logger.instance_variable_get('@messages').should_not be_blank
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'keeps track what log level a message has' do
|
19
|
+
@logger.log :info, 'something'
|
20
|
+
@logger.instance_variable_get('@messages').first[:type].should be :info
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'fails if the log level is unknown' do
|
24
|
+
lambda { @logger.log(:meh, 'something') }.should raise_error
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
context 'message reporter' do
|
29
|
+
it 'prints the messages from the messages hash' do
|
30
|
+
@logger.log :info, 'just a message'
|
31
|
+
@output.should_receive(:puts).with('just a message')
|
32
|
+
@logger.report
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'prints all messages when no type given' do
|
36
|
+
@logger.log :info, 'an info message'
|
37
|
+
@logger.log :warn, 'a warn message'
|
38
|
+
@output.should_receive(:puts).exactly(2).times
|
39
|
+
@logger.report
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'prints only the message of the given type when a type is supplied' do
|
43
|
+
@logger.log :info, 'an info message'
|
44
|
+
@logger.log :info, 'another info message'
|
45
|
+
@logger.log :warn, 'a warn message'
|
46
|
+
@output.should_receive(:puts).exactly(2).times
|
47
|
+
@logger.report(:info)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
data/spec/blazing/recipe_spec.rb
CHANGED
@@ -24,6 +24,14 @@ describe Blazing::Recipe do
|
|
24
24
|
|
25
25
|
context 'recipe discovery' do
|
26
26
|
|
27
|
+
around :each do |example|
|
28
|
+
# Make sure specs dont interfere with recipe discovery mechanism
|
29
|
+
recipes = Blazing::Recipe.list
|
30
|
+
recipes.each { |r| Blazing.send(:remove_const, r.name.to_s.gsub(/^.*::/, '')) rescue NameError }
|
31
|
+
example.run
|
32
|
+
recipes.each { |r| Blazing.send(:remove_const, r.name.to_s.gsub(/^.*::/, '')) rescue NameError }
|
33
|
+
end
|
34
|
+
|
27
35
|
it 'before loading them, no recipes are known' do
|
28
36
|
lambda { Blazing::RvmRecipe }.should raise_error NameError
|
29
37
|
end
|
@@ -31,18 +39,13 @@ describe Blazing::Recipe do
|
|
31
39
|
it 'can discover available recipes' do
|
32
40
|
recipes = Blazing::Recipe.list
|
33
41
|
recipes.should be_all { |recipe| recipe.superclass.should == Blazing::Recipe }
|
34
|
-
recipes.each { |r| Blazing.send(:remove_const, r.name.to_s.gsub(/^.*::/, '')) }
|
35
42
|
end
|
36
43
|
|
37
44
|
end
|
38
45
|
|
39
46
|
context 'running recipes' do
|
40
47
|
|
41
|
-
|
42
|
-
# @logger = double('logger').as_null_object
|
43
|
-
# end
|
44
|
-
|
45
|
-
it 'delegate running a recipe to the recipe implementation' do
|
48
|
+
it 'delegates running a recipe to the recipe implementation' do
|
46
49
|
Blazing::Recipe.load_builtin_recipes
|
47
50
|
Blazing::RvmRecipe.should_receive(:run)
|
48
51
|
Blazing::Recipe.new(:rvm).run
|
@@ -68,8 +71,10 @@ describe Blazing::Recipe do
|
|
68
71
|
end
|
69
72
|
|
70
73
|
it 'logs an error when a recipe cant be loaded' do
|
71
|
-
|
72
|
-
Blazing::Recipe.new(:undefined)
|
74
|
+
@logger = double
|
75
|
+
@recipe = Blazing::Recipe.new(:undefined, :_logger => @logger)
|
76
|
+
@logger.should_receive(:log) # TODO: WTF??? .with(:error, "unable to laod #{@unknown_recipe_name} recipe")
|
77
|
+
@recipe.run
|
73
78
|
end
|
74
79
|
|
75
80
|
end
|
data/spec/blazing/remote_spec.rb
CHANGED
@@ -3,11 +3,134 @@ require 'blazing/remote'
|
|
3
3
|
|
4
4
|
describe Blazing::Remote do
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
|
6
|
+
before :each do
|
7
|
+
@remote = Blazing::Remote.new
|
8
|
+
@remote.instance_variable_set('@_dir', double('Dir', :chdir => nil))
|
9
|
+
end
|
10
|
+
|
11
|
+
describe '#post_receive' do
|
12
|
+
before :each do
|
13
|
+
recipes = []
|
14
|
+
config = double('config', :load => double('actual_config', :recipes => recipes, :find_target => double('target', :recipes => recipes)))
|
15
|
+
@remote.instance_variable_set('@_config', config)
|
16
|
+
@remote.instance_variable_set('@runner', double('runner', :run => true))
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'sets up the git dir' do
|
20
|
+
@remote.should_receive(:set_git_dir)
|
21
|
+
@remote.post_receive('sometarget')
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'runs the recipes' do
|
25
|
+
@remote.should_receive(:setup_and_run_recipes)
|
26
|
+
@remote.post_receive('sometarget')
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'resets the git repository' do
|
30
|
+
@remote.should_receive(:reset_head!)
|
31
|
+
@remote.post_receive('sometarget')
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
describe '#gemfile_present?' do
|
36
|
+
it 'checks if a Gemfile is in the cwd' do
|
37
|
+
File.should_receive(:exists?).with('Gemfile')
|
38
|
+
@remote.gemfile_present?
|
9
39
|
end
|
40
|
+
end
|
10
41
|
|
42
|
+
describe '#set_git_dir' do
|
43
|
+
it 'sets .git as gitdir if git dir is "."' do
|
44
|
+
env = { 'GIT_DIR'=> '.' }
|
45
|
+
@remote.instance_variable_set('@_env', env)
|
46
|
+
@remote.set_git_dir
|
47
|
+
@remote.instance_variable_get('@_env')['GIT_DIR'].should == '.git'
|
48
|
+
end
|
11
49
|
end
|
12
50
|
|
51
|
+
describe '#reset_head!' do
|
52
|
+
it 'does a git reset --hard HEAD' do
|
53
|
+
runner = double('runner', :run => nil)
|
54
|
+
@remote.instance_variable_set('@runner', runner)
|
55
|
+
runner.should_receive(:run).with('git reset --hard HEAD')
|
56
|
+
@remote.reset_head!
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
describe '#config' do
|
61
|
+
it 'loads the blazing config' do
|
62
|
+
config = double('config', :load => nil)
|
63
|
+
@remote.instance_variable_set('@_config', config)
|
64
|
+
config.should_receive(:load)
|
65
|
+
@remote.config
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
describe '#use_rvm?' do
|
70
|
+
context 'with rvm recipe enabled' do
|
71
|
+
it 'returns true' do
|
72
|
+
@remote.instance_variable_set('@recipes', double('rvm_recipe', :find => true, :delete_if => nil))
|
73
|
+
@remote.use_rvm?.should be true
|
74
|
+
end
|
75
|
+
|
76
|
+
it 'deletes the rvm recipes from the recipes array' do
|
77
|
+
@remote.instance_variable_set('@recipes', [double('rvm_recipe', :name => 'rvm')])
|
78
|
+
@remote.use_rvm?
|
79
|
+
@remote.instance_variable_get('@recipes').should be_blank
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
context 'without rvm_recipe' do
|
84
|
+
it 'returns false' do
|
85
|
+
@remote.instance_variable_set('@recipes', double('rvm_recipe', :find => false, :delete_if => nil))
|
86
|
+
@remote.use_rvm?.should be false
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
describe '#setup_and_run_recipes' do
|
92
|
+
context 'when the target has no recipes' do
|
93
|
+
it 'assigns the global recipes settings from the config' do
|
94
|
+
recipe_probe = double('recipe_probe', :name => 'noname', :run => nil)
|
95
|
+
global_config = double('config', :recipes => [recipe_probe])
|
96
|
+
blazing_config_class = double('blazing_config', :load => global_config)
|
97
|
+
@remote.instance_variable_set('@_config', blazing_config_class)
|
98
|
+
@remote.setup_and_run_recipes
|
99
|
+
@remote.instance_variable_get('@recipes').first.should be recipe_probe
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
context 'when the target has recipes' do
|
104
|
+
it 'does not touch the target recipes' do
|
105
|
+
target_recipe_probe = double('target_recipe_probe', :name => 'target', :run => nil)
|
106
|
+
global_recipe_probe = double('global_recipe_probe', :name => 'global', :run => nil)
|
107
|
+
global_config = double('config', :recipes => [global_recipe_probe])
|
108
|
+
blazing_config_class = double('blazing_config', :load => global_config)
|
109
|
+
@remote.instance_variable_set('@_config', blazing_config_class)
|
110
|
+
@remote.instance_variable_set('@recipes', [target_recipe_probe])
|
111
|
+
@remote.setup_and_run_recipes
|
112
|
+
@remote.instance_variable_get('@recipes').first.name.should == 'target'
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
describe '#run_recipes' do
|
118
|
+
it 'runs all recipes' do
|
119
|
+
recipes = [double('one', :name => nil), double('two', :name => nil), double('three', :name => nil)]
|
120
|
+
@remote.instance_variable_set('@recipes', recipes)
|
121
|
+
recipes.each do |recipe|
|
122
|
+
recipe.should_receive(:run)
|
123
|
+
end
|
124
|
+
@remote.run_recipes
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
describe '#run_bootstrap_recipes' do
|
129
|
+
it 'runs rvm recipe if it is enabled' do
|
130
|
+
rvm_recipe = double('rvm_recipe', :name => 'rvm')
|
131
|
+
@remote.instance_variable_set('@recipes', [rvm_recipe])
|
132
|
+
rvm_recipe.should_receive(:run)
|
133
|
+
@remote.run_bootstrap_recipes
|
134
|
+
end
|
135
|
+
end
|
13
136
|
end
|
@@ -0,0 +1,110 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'blazing/target'
|
3
|
+
|
4
|
+
describe Blazing::Target do
|
5
|
+
|
6
|
+
before :each do
|
7
|
+
@logger = double('logger')
|
8
|
+
@runner = double('runner', :run => nil)
|
9
|
+
@hook = double('hook', :new => double('template', :generate => nil))
|
10
|
+
@options = { :deploy_to => 'someone@somehost:/some/path', :_hook => @hook, :_runner => @runner, :_logger => @logger }
|
11
|
+
end
|
12
|
+
|
13
|
+
describe '#initialize' do
|
14
|
+
context 'with deploy_to option' do
|
15
|
+
it 'sets the configuration options accordingly and creates an accessor' do
|
16
|
+
@target = Blazing::Target.new('somename', @options)
|
17
|
+
@target.deploy_to.should == @options[:deploy_to]
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'extracts the hostname from the deploy_to option' do
|
21
|
+
@target = Blazing::Target.new('somename', @options)
|
22
|
+
@target.host.should == 'somehost'
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'extracts the username from the deploy_to option' do
|
26
|
+
@target = Blazing::Target.new('somename', @options)
|
27
|
+
@target.user.should == 'someone'
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'extracts the path from the deploy_to option' do
|
31
|
+
@target = Blazing::Target.new('somename', @options)
|
32
|
+
@target.path.should == '/some/path'
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'overrides the hostname that was set explicitly' do
|
36
|
+
@target = Blazing::Target.new('somename', @options.merge({ :host => 'anotherhost' }))
|
37
|
+
@target.host.should == 'somehost'
|
38
|
+
end
|
39
|
+
|
40
|
+
it 'overrides the username that was set explicitly' do
|
41
|
+
@target = Blazing::Target.new('somename', @options.merge({ :user => 'anotheruser' }))
|
42
|
+
@target.user.should == 'someone'
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'overrides the path that was set explicitly' do
|
46
|
+
@target = Blazing::Target.new('somename', @options.merge({ :path => 'anotherpath' }))
|
47
|
+
@target.path.should == '/some/path'
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
context 'with missing options' do
|
52
|
+
it 'raises an error if the path option is missing' do
|
53
|
+
@options = { :host => 'somehost', :user => 'someuser' }
|
54
|
+
lambda { Blazing::Target.new('somename', @options) }.should raise_error
|
55
|
+
end
|
56
|
+
|
57
|
+
it 'raises an error if the host option is missing' do
|
58
|
+
@options = { :user => 'someuser', :path => 'somepath' }
|
59
|
+
lambda { Blazing::Target.new('somename', @options) }.should raise_error
|
60
|
+
end
|
61
|
+
|
62
|
+
it 'raises an error if the user option is missing' do
|
63
|
+
@options = { :host => 'somehost', :path => 'somepath' }
|
64
|
+
lambda { Blazing::Target.new('somename', @options) }.should raise_error
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
describe '#config' do
|
70
|
+
it 'delegates to Blazing::Config.load' do
|
71
|
+
blazing_config = double
|
72
|
+
target = Blazing::Target.new('somename', @options)
|
73
|
+
target.instance_variable_set("@_config", blazing_config)
|
74
|
+
blazing_config.should_receive(:load)
|
75
|
+
target.config
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
|
80
|
+
describe '#deploy' do
|
81
|
+
it 'uses git push to deploy to the target' do
|
82
|
+
target = Blazing::Target.new('somename', @options)
|
83
|
+
@runner.should_receive(:run).with(/git push somename/)
|
84
|
+
target.deploy
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
describe '#setup' do
|
89
|
+
before :each do
|
90
|
+
blazing_config = double('config', :load => Blazing::Config.new)
|
91
|
+
@target = Blazing::Target.new('somename', @options)
|
92
|
+
@target.instance_variable_set("@_config", blazing_config)
|
93
|
+
end
|
94
|
+
|
95
|
+
it 'clones the repository on the target location' do
|
96
|
+
@target.should_receive(:clone_repository)
|
97
|
+
@target.setup
|
98
|
+
end
|
99
|
+
|
100
|
+
it 'adds the target as a git remote' do
|
101
|
+
@target.should_receive(:add_target_as_remote)
|
102
|
+
@target.setup
|
103
|
+
end
|
104
|
+
|
105
|
+
it 'sets up the post-receive hook' do
|
106
|
+
@target.should_receive(:setup_post_receive_hook)
|
107
|
+
@target.setup
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
data/spec/spec_helper.rb
CHANGED
File without changes
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: blazing
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.0.
|
5
|
+
version: 0.0.7
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Felipe Kaufmann
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-
|
13
|
+
date: 2011-05-31 00:00:00 +02:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -66,7 +66,6 @@ files:
|
|
66
66
|
- Rakefile
|
67
67
|
- bin/blazing
|
68
68
|
- blazing.gemspec
|
69
|
-
- index.html
|
70
69
|
- lib/blazing.rb
|
71
70
|
- lib/blazing/cli/base.rb
|
72
71
|
- lib/blazing/cli/create.rb
|
@@ -81,11 +80,23 @@ files:
|
|
81
80
|
- lib/blazing/recipes/bundler_recipe.rb
|
82
81
|
- lib/blazing/recipes/rvm_recipe.rb
|
83
82
|
- lib/blazing/remote.rb
|
83
|
+
- lib/blazing/runner.rb
|
84
84
|
- lib/blazing/target.rb
|
85
85
|
- lib/blazing/version.rb
|
86
|
+
- spec/blazing/cli/base_spec.rb
|
87
|
+
- spec/blazing/cli/create_spec.rb
|
88
|
+
- spec/blazing/cli/hook_spec.rb
|
89
|
+
- spec/blazing/config_spec.rb
|
90
|
+
- spec/blazing/logger_spec.rb
|
86
91
|
- spec/blazing/recipe_spec.rb
|
92
|
+
- spec/blazing/recipes/bundler_recipe_spec.rb
|
93
|
+
- spec/blazing/recipes/passenger_recipe_spec.rb
|
94
|
+
- spec/blazing/recipes/rvm_recipe_spec.rb
|
87
95
|
- spec/blazing/remote_spec.rb
|
96
|
+
- spec/blazing/runner_spec.rb
|
97
|
+
- spec/blazing/target_spec.rb
|
88
98
|
- spec/spec_helper.rb
|
99
|
+
- spec/support/config.rb
|
89
100
|
has_rdoc: true
|
90
101
|
homepage: https://github.com/effkay/blazing
|
91
102
|
licenses: []
|
@@ -115,6 +126,17 @@ signing_key:
|
|
115
126
|
specification_version: 3
|
116
127
|
summary: blazing fast deployment
|
117
128
|
test_files:
|
129
|
+
- spec/blazing/cli/base_spec.rb
|
130
|
+
- spec/blazing/cli/create_spec.rb
|
131
|
+
- spec/blazing/cli/hook_spec.rb
|
132
|
+
- spec/blazing/config_spec.rb
|
133
|
+
- spec/blazing/logger_spec.rb
|
118
134
|
- spec/blazing/recipe_spec.rb
|
135
|
+
- spec/blazing/recipes/bundler_recipe_spec.rb
|
136
|
+
- spec/blazing/recipes/passenger_recipe_spec.rb
|
137
|
+
- spec/blazing/recipes/rvm_recipe_spec.rb
|
119
138
|
- spec/blazing/remote_spec.rb
|
139
|
+
- spec/blazing/runner_spec.rb
|
140
|
+
- spec/blazing/target_spec.rb
|
120
141
|
- spec/spec_helper.rb
|
142
|
+
- spec/support/config.rb
|