pulsar 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/.ruby-gemset ADDED
@@ -0,0 +1 @@
1
+ pulsar
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 1.9.3
data/.travis.yml CHANGED
@@ -11,3 +11,4 @@ branches:
11
11
  rvm:
12
12
  - 1.9.2
13
13
  - 1.9.3
14
+ - 2.0.0
@@ -1,7 +1,7 @@
1
1
  module Pulsar
2
2
  class ListCommand < UtilsCommand
3
3
  include Pulsar::Options::ConfRepo
4
-
4
+
5
5
  def execute
6
6
  Bundler.with_clean_env do
7
7
  begin
@@ -12,7 +12,7 @@ module Pulsar
12
12
  "do everything pulsar does (build a Capfile) but don't run the cap command",
13
13
  :default => false
14
14
 
15
- unless File.exists?("#{Dir.pwd}/config.ru")
15
+ if !from_application_path?
16
16
  parameter "APPLICATION", "the application which you would like to deploy. Pass a comma separated list to deploy multiple applications at once"
17
17
  end
18
18
 
@@ -23,9 +23,7 @@ module Pulsar
23
23
  parameter "[TASKS] ...", "the arguments and/or options that will be passed to capistrano", :default => "deploy"
24
24
 
25
25
  def execute
26
- apps = application.split(',') rescue [ File.basename(Dir.pwd) ]
27
-
28
- apps.each do |app|
26
+ find_apps.each do |app|
29
27
  target = "#{app}:#{environment}"
30
28
 
31
29
  Bundler.with_clean_env do
@@ -36,17 +34,31 @@ module Pulsar
36
34
  build_capfile(target)
37
35
 
38
36
  unless skip_cap_run?
39
- cap_args = [tasks_list].flatten.join(" ")
37
+ cap_args = [ tasks_list ].flatten.join(" ")
40
38
  run_capistrano(cap_args)
41
39
  end
42
40
  ensure
43
- remove_capfile unless keep_capfile?
44
- remove_repo unless keep_repo?
45
-
46
- reset_for_other_app!
41
+ cleanup!
47
42
  end
48
43
  end
49
44
  end
50
45
  end
46
+
47
+ private
48
+
49
+ def find_apps
50
+ if from_application_path?
51
+ [ ENV['PULSAR_APP_NAME'] || File.basename(application_path) ]
52
+ else
53
+ application.split(',')
54
+ end
55
+ end
56
+
57
+ def cleanup!
58
+ remove_capfile unless keep_capfile?
59
+ remove_repo unless keep_repo?
60
+
61
+ reset_for_other_app!
62
+ end
51
63
  end
52
64
  end
@@ -12,12 +12,15 @@ module Pulsar
12
12
  end
13
13
 
14
14
  def method_missing(meth, *args, &block)
15
- if File.directory?("#{ENV['CONFIG_PATH']}/recipes/#{meth}")
16
- args.each do |arg|
17
- @cap_conf.load("#{ENV['CONFIG_PATH']}/recipes/#{meth}/#{arg}.rb")
18
- end
19
- else
20
- super
15
+ recipes = "#{ENV['CONFIG_PATH']}/recipes/#{meth}"
16
+
17
+ File.directory?(recipes) || raise("There are no recipes of type #{meth}")
18
+
19
+ args.each do |arg|
20
+ recipe = "#{recipes}/#{arg}.rb"
21
+ File.exists?(recipe) || raise("There is no #{arg} recipe")
22
+
23
+ @cap_conf.send(:load, recipe)
21
24
  end
22
25
  end
23
26
  end
@@ -25,6 +28,10 @@ module Pulsar
25
28
  def load_recipes(&block)
26
29
  DSL.new(self, &block)
27
30
  end
31
+
32
+ def from_application_path?
33
+ ENV.has_key?('APP_PATH')
34
+ end
28
35
  end
29
36
  end
30
37
  end
@@ -4,162 +4,200 @@ module Pulsar
4
4
  module Helpers
5
5
  module Clamp
6
6
  include FileUtils
7
-
8
- def build_capfile(args)
9
- app, stage = args.split(":")
10
7
 
11
- # Variables
12
- set_log_level
13
- include_base_conf
14
- include_app(app, stage) if app
15
-
16
- # Recipes
17
- include_app_recipes(app, stage) if app
8
+ def self.included(base)
9
+ base.extend(InstanceAndClassMethods)
10
+ include InstanceMethods
18
11
  end
19
12
 
20
- def bundle_install
21
- cd(config_path, :verbose => verbose?) do
22
- run_cmd("bundle install --quiet", :verbose => verbose?)
13
+ module InstanceAndClassMethods
14
+ def from_application_path?
15
+ File.exists?("#{Dir.pwd}/config.ru")
23
16
  end
24
17
  end
25
18
 
26
- def capfile_path
27
- @capfile_name ||= "#{tmp_dir}/capfile-#{time_to_deploy}"
28
- end
19
+ module InstanceMethods
20
+ include InstanceAndClassMethods
29
21
 
30
- def cd(path, opts, &block)
31
- puts "Directory: #{path.white}".yellow if opts[:verbose]
32
- FileUtils.cd(path) { yield }
33
- end
22
+ def application_path
23
+ Dir.pwd if from_application_path?
24
+ end
25
+
26
+ def build_capfile(args)
27
+ app, stage = args.split(":")
34
28
 
35
- def config_path
36
- @configuration_path ||= "#{tmp_dir}/conf-repo-#{time_to_deploy}"
37
- end
29
+ # Variables
30
+ set_log_level
31
+ include_base_conf
32
+ include_app(app, stage) if app
38
33
 
39
- def create_capfile
40
- touch(capfile_path, :verbose => verbose?)
41
- end
34
+ # Recipes
35
+ include_app_recipes(app, stage) if app
36
+ end
42
37
 
43
- def fetch_repo
44
- if conf_repo =~ /\A[a-zA-Z-]+\/[a-zA-Z-]+\Z/
45
- fetch_git_repo("git@github.com:#{conf_repo}.git")
46
- else
47
- fetch_directory_repo(conf_repo)
38
+ def bundle_install
39
+ cd(config_path, :verbose => verbose?) do
40
+ run_cmd("bundle install --quiet", :verbose => verbose?)
41
+ end
48
42
  end
49
- end
50
43
 
51
- def fetch_directory_repo(repo)
52
- if File.directory?("#{repo}/.git")
53
- fetch_git_repo(repo)
54
- else
55
- run_cmd("cp -rp #{repo} #{config_path}", :verbose => verbose?)
44
+ def capfile_path
45
+ @capfile_name ||= "#{tmp_dir}/capfile-#{time_to_deploy}"
56
46
  end
57
- end
58
47
 
59
- def fetch_git_repo(repo)
60
- git_options = "--quiet --depth=1 --branch #{conf_branch}"
61
- run_cmd("git clone #{git_options} #{repo} #{config_path}", :verbose => verbose?)
62
- end
48
+ def cd(path, opts, &block)
49
+ puts "Directory: #{path.white}".yellow if opts[:verbose]
50
+ FileUtils.cd(path) { yield }
51
+ end
52
+
53
+ def config_path
54
+ @configuration_path ||= "#{tmp_dir}/conf-repo-#{time_to_deploy}"
55
+ end
63
56
 
64
- def include_app(app, stage=nil)
65
- app_file = "#{config_path}/apps/#{app}/defaults.rb"
66
- stage_file = "#{config_path}/apps/#{app}/#{stage}.rb"
57
+ def create_capfile
58
+ touch(capfile_path, :verbose => verbose?)
59
+ end
67
60
 
68
- if File.exists?(app_file)
69
- run_cmd("cat #{app_file} >> #{capfile_path}", :verbose => verbose?)
61
+ def fetch_repo
62
+ if conf_repo =~ /\A[a-zA-Z-]+\/[a-zA-Z-]+\Z/
63
+ fetch_git_repo("git@github.com:#{conf_repo}.git")
64
+ else
65
+ fetch_directory_repo(conf_repo)
66
+ end
70
67
  end
71
68
 
72
- if stage
73
- run_cmd("cat #{stage_file} >> #{capfile_path}", :verbose => verbose?)
69
+ def fetch_directory_repo(repo)
70
+ if File.directory?("#{repo}/.git")
71
+ fetch_git_repo(repo)
72
+ else
73
+ run_cmd("cp -rp #{repo} #{config_path}", :verbose => verbose?)
74
+ end
74
75
  end
75
- end
76
76
 
77
- def include_app_recipes(app, stage=nil)
78
- recipes_dir = "#{config_path}/apps/#{app}/recipes"
77
+ def fetch_git_repo(repo)
78
+ git_options = "--quiet --depth=1 --branch #{conf_branch}"
79
+ run_cmd("git clone #{git_options} #{repo} #{config_path}", :verbose => verbose?)
80
+ end
81
+
82
+ def include_app(app, stage=nil)
83
+ app_file = "#{config_path}/apps/#{app}/defaults.rb"
84
+ stage_file = "#{config_path}/apps/#{app}/#{stage}.rb"
85
+
86
+ if File.exists?(app_file)
87
+ run_cmd("cat #{app_file} >> #{capfile_path}", :verbose => verbose?)
88
+ end
79
89
 
80
- Dir.glob("#{recipes_dir}/*.rb").each do |recipe|
81
- run_cmd("cat #{recipe} >> #{capfile_path}", :verbose => verbose?)
90
+ if stage
91
+ run_cmd("cat #{stage_file} >> #{capfile_path}", :verbose => verbose?)
92
+ end
82
93
  end
83
94
 
84
- if stage
85
- Dir.glob("#{recipes_dir}/#{stage}/*.rb").each do |recipe|
95
+ def include_app_recipes(app, stage=nil)
96
+ recipes_dir = "#{config_path}/apps/#{app}/recipes"
97
+
98
+ Dir.glob("#{recipes_dir}/*.rb").each do |recipe|
86
99
  run_cmd("cat #{recipe} >> #{capfile_path}", :verbose => verbose?)
87
100
  end
101
+
102
+ if stage
103
+ Dir.glob("#{recipes_dir}/#{stage}/*.rb").each do |recipe|
104
+ run_cmd("cat #{recipe} >> #{capfile_path}", :verbose => verbose?)
105
+ end
106
+ end
88
107
  end
89
- end
90
108
 
91
- def include_base_conf
92
- run_cmd("cat #{config_path}/apps/base.rb >> #{capfile_path}", :verbose => verbose?)
93
- end
109
+ def include_base_conf
110
+ run_cmd("cat #{config_path}/apps/base.rb >> #{capfile_path}", :verbose => verbose?)
111
+ end
94
112
 
95
- def list_apps
96
- apps = Dir["#{config_path}/apps/*"].each do |app|
97
- if File.directory?(app)
98
- app_name = File.basename(app)
99
- app_envs = []
113
+ def list_apps
114
+ apps = Dir["#{config_path}/apps/*"].each do |app|
115
+ if File.directory?(app)
116
+ app_name = File.basename(app)
117
+ app_envs = []
100
118
 
101
- Dir["#{app}/*"].each do |env|
102
- environments = %w(development staging production)
103
- env_name = File.basename(env, '.rb')
119
+ Dir["#{app}/*"].each do |env|
120
+ environments = %w(development staging production)
121
+ env_name = File.basename(env, '.rb')
104
122
 
105
- if environments.include?(env_name)
106
- app_envs << env_name
123
+ if environments.include?(env_name)
124
+ app_envs << env_name
125
+ end
107
126
  end
127
+
128
+ puts "#{app_name.cyan}: #{app_envs.map(&:magenta).join(', ')}"
108
129
  end
130
+ end
131
+ end
132
+
133
+ def load_configuration
134
+ conf_path = application_path || Dir.home
135
+ conf_file = File.join(conf_path, ".pulsar")
136
+
137
+ if File.file?(conf_file)
138
+ File.readlines(conf_file).each do |line|
139
+ conf, value = line.split("=")
109
140
 
110
- puts "#{app_name.cyan}: #{app_envs.map(&:magenta).join(', ')}"
141
+ ENV[conf] = value.chomp.gsub('"', '')
142
+ end
111
143
  end
112
144
  end
113
- end
114
145
 
115
- def remove_capfile
116
- rm_rf(capfile_path, :verbose => verbose?)
117
- end
146
+ def remove_capfile
147
+ rm_rf(capfile_path, :verbose => verbose?)
148
+ end
118
149
 
119
- def remove_repo
120
- rm_rf(config_path, :verbose => verbose?)
121
- end
150
+ def remove_repo
151
+ rm_rf(config_path, :verbose => verbose?)
152
+ end
122
153
 
123
- def reset_for_other_app!
124
- @capfile_name = @configuration_path = @now = nil
125
- end
154
+ def reset_for_other_app!
155
+ @capfile_name = @configuration_path = @now = nil
156
+ end
157
+
158
+ def run_capistrano(args)
159
+ cmd = "bundle exec cap"
160
+ env = "CONFIG_PATH=#{config_path}"
161
+ opts = "--file #{capfile_path}"
126
162
 
127
- def run_capistrano(args)
128
- cd(config_path, :verbose => verbose?) do
129
- run_cmd("bundle exec cap CONFIG_PATH=#{config_path} --file #{capfile_path} #{args}", :verbose => verbose?)
163
+ env += " APP_PATH=#{application_path}" unless application_path.nil?
164
+
165
+ cd(config_path, :verbose => verbose?) do
166
+ run_cmd("#{cmd} #{env} #{opts} #{args}", :verbose => verbose?)
167
+ end
130
168
  end
131
- end
132
169
 
133
- def rm_rf(path, opts)
134
- puts "Remove: #{path.white}".yellow if opts[:verbose]
135
- FileUtils.rm_rf(path)
136
- end
170
+ def rm_rf(path, opts)
171
+ puts "Remove: #{path.white}".yellow if opts[:verbose]
172
+ FileUtils.rm_rf(path)
173
+ end
137
174
 
138
- def run_cmd(cmd, opts)
139
- puts "Command: #{cmd.white}".yellow if opts[:verbose]
140
- system(cmd)
175
+ def run_cmd(cmd, opts)
176
+ puts "Command: #{cmd.white}".yellow if opts[:verbose]
177
+ system(cmd)
141
178
 
142
- raise "Command #{cmd} Failed" if $? != 0
143
- end
179
+ raise "Command #{cmd} Failed" if $? != 0
180
+ end
144
181
 
145
- def set_log_level
146
- level = log_level.upcase
147
- levels = %w(IMPORTANT INFO DEBUG)
182
+ def set_log_level
183
+ level = log_level.upcase
184
+ levels = %w(IMPORTANT INFO DEBUG)
148
185
 
149
- level = levels.first unless levels.include?(level)
186
+ level = levels.first unless levels.include?(level)
150
187
 
151
- cmd = "echo 'logger.level = logger.level = Capistrano::Logger::#{level}' >> #{capfile_path}"
188
+ cmd = "echo 'logger.level = logger.level = Capistrano::Logger::#{level}' >> #{capfile_path}"
152
189
 
153
- run_cmd(cmd, :verbose => verbose?)
154
- end
190
+ run_cmd(cmd, :verbose => verbose?)
191
+ end
155
192
 
156
- def time_to_deploy
157
- @now ||= Time.now.strftime("%Y-%m-%d-%H%M%S-s#{rand(9999)}")
158
- end
193
+ def time_to_deploy
194
+ @now ||= Time.now.strftime("%Y-%m-%d-%H%M%S-s#{rand(9999)}")
195
+ end
159
196
 
160
- def touch(file, opts)
161
- puts "Touch: #{file.white}".yellow if opts[:verbose]
162
- FileUtils.touch(file)
197
+ def touch(file, opts)
198
+ puts "Touch: #{file.white}".yellow if opts[:verbose]
199
+ FileUtils.touch(file)
200
+ end
163
201
  end
164
202
  end
165
203
  end
@@ -23,6 +23,18 @@ module Pulsar
23
23
  "a directory where to put the configuration repo to build capfile with",
24
24
  :default => "/tmp/pulsar"
25
25
  end
26
+
27
+ #
28
+ # TODO: find a way to fix this hack. This is made so that
29
+ # load_configuration() is called before Clamp parses command
30
+ # line arguments (and runs into errors because no conf repo
31
+ # is defined).
32
+ #
33
+ def parse(arguments)
34
+ self.class.send(:include, Pulsar::Helpers::Clamp)
35
+ load_configuration
36
+ super
37
+ end
26
38
  end
27
39
  end
28
40
  end
@@ -1,3 +1,3 @@
1
1
  module Pulsar
2
- VERSION = "0.1.1"
2
+ VERSION = "0.2.0"
3
3
  end
data/pulsar.gemspec CHANGED
@@ -14,7 +14,7 @@ Gem::Specification.new do |gem|
14
14
  to store all your precious configurations and recipes to build Capistrano
15
15
  deploys on it.
16
16
  }
17
- gem.homepage = "https://github.com/nebulab/pulsar"
17
+ gem.homepage = "http://pulsar.nebulab.it"
18
18
 
19
19
  gem.files = `git ls-files`.split($/)
20
20
  gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
@@ -19,6 +19,34 @@ describe Pulsar::ListCommand do
19
19
  Dir.glob("#{tmp_path}/conf-repo*").should be_empty
20
20
  end
21
21
 
22
+ it "reads configuration variables from .pulsar file in home" do
23
+ env_vars = [ "PULSAR_CONF_REPO=\"#{dummy_conf_path}\"\n"]
24
+
25
+ File.stub(:file?).and_return(true)
26
+ File.stub(:readlines).with("#{Dir.home}/.pulsar").and_return(env_vars)
27
+
28
+ pulsar.run(full_list_args)
29
+
30
+ ENV.should have_key('PULSAR_CONF_REPO')
31
+ ENV['PULSAR_CONF_REPO'].should == dummy_conf_path
32
+ end
33
+
34
+ it "reads configuration variables from .pulsar file in rack app directory" do
35
+ env_vars = [ "PULSAR_CONF_REPO=\"#{dummy_conf_path}\"\n"]
36
+
37
+ File.stub(:file?).and_return(true)
38
+ File.stub(:readlines).with("#{File.expand_path(dummy_rack_app_path)}/.pulsar").and_return(env_vars)
39
+
40
+ FileUtils.cd(dummy_rack_app_path) do
41
+ reload_main_command
42
+
43
+ pulsar.run(full_list_args)
44
+ end
45
+
46
+ ENV.should have_key('PULSAR_CONF_REPO')
47
+ ENV['PULSAR_CONF_REPO'].should == dummy_conf_path
48
+ end
49
+
22
50
  context "--conf-repo option" do
23
51
  it "is required" do
24
52
  expect { pulsar.parse([]) }.to raise_error(Clamp::UsageError)
@@ -39,6 +39,40 @@ describe Pulsar::MainCommand do
39
39
  expect { pulsar.run(full_cap_args + apps_to_deploy) }.to change{ Dir.glob("#{tmp_path}/capfile-*").length }.by(2)
40
40
  end
41
41
 
42
+ it "reads configuration variables from .pulsar file in home" do
43
+ env_vars = [ "PULSAR_APP_NAME=\"dummy_app\"\n", "PULSAR_CONF_REPO=\"#{dummy_conf_path}\"\n"]
44
+
45
+ File.stub(:file?).and_return(true)
46
+ File.stub(:readlines).with("#{Dir.home}/.pulsar").and_return(env_vars)
47
+
48
+ pulsar.run(full_cap_args + dummy_app)
49
+
50
+ ENV.should have_key('PULSAR_APP_NAME')
51
+ ENV['PULSAR_APP_NAME'].should == "dummy_app"
52
+
53
+ ENV.should have_key('PULSAR_CONF_REPO')
54
+ ENV['PULSAR_CONF_REPO'].should == dummy_conf_path
55
+ end
56
+
57
+ it "reads configuration variables from .pulsar file in rack app directory" do
58
+ env_vars = [ "PULSAR_APP_NAME=\"dummy_app\"\n", "PULSAR_CONF_REPO=\"#{dummy_conf_path}\"\n"]
59
+
60
+ File.stub(:file?).and_return(true)
61
+ File.stub(:readlines).with("#{File.expand_path(dummy_rack_app_path)}/.pulsar").and_return(env_vars)
62
+
63
+ FileUtils.cd(dummy_rack_app_path) do
64
+ reload_main_command
65
+
66
+ pulsar.run(full_cap_args + %w(production))
67
+ end
68
+
69
+ ENV.should have_key('PULSAR_APP_NAME')
70
+ ENV['PULSAR_APP_NAME'].should == "dummy_app"
71
+
72
+ ENV.should have_key('PULSAR_CONF_REPO')
73
+ ENV['PULSAR_CONF_REPO'].should == dummy_conf_path
74
+ end
75
+
42
76
  context "Capfile" do
43
77
  it "uses base.rb in staging stage" do
44
78
  pulsar.run(full_cap_args + dummy_app(:staging))
@@ -103,6 +137,18 @@ describe Pulsar::MainCommand do
103
137
  latest_capfile.should include("# This is apps/dummy_app/recipes/production/custom_recipe.rb")
104
138
  latest_capfile.should_not include("# This is apps/dummy_app/recipes/staging/custom_recipe.rb")
105
139
  end
140
+
141
+ it "uses dirname from PULSAR_APP_NAME when inside a rack app directory" do
142
+ ENV["PULSAR_APP_NAME"] = "other_dummy_app"
143
+
144
+ FileUtils.cd(dummy_rack_app_path) do
145
+ reload_main_command
146
+ pulsar.run(full_cap_args + %w(production))
147
+ end
148
+
149
+ latest_capfile.should include("# This is apps/other_dummy_app/defaults.rb")
150
+ latest_capfile.should include("# This is apps/other_dummy_app/production.rb")
151
+ end
106
152
  end
107
153
 
108
154
  context "--version option" do
@@ -0,0 +1,44 @@
1
+ require 'spec_helper'
2
+
3
+ describe Pulsar::Helpers::Capistrano do
4
+ include Pulsar::Helpers::Capistrano
5
+
6
+ context "load_recipes" do
7
+ it "loads capistrano recipes from CONFIG_PATH env variable" do
8
+ ENV['CONFIG_PATH'] = "/config/path"
9
+ File.stub(:directory?).and_return(true)
10
+ File.stub(:exists?).and_return(true)
11
+
12
+ self.should_receive(:load).with("/config/path/recipes/generic/recipe.rb")
13
+
14
+ load_recipes { generic :recipe }
15
+ end
16
+
17
+ it "raises a missing recipe type exception when no recipe folder is found" do
18
+ File.stub(:directory?).and_return(false)
19
+
20
+ expect { load_recipes { generic :recipe } }.to raise_error(RuntimeError, /no recipes of type generic/)
21
+ end
22
+
23
+ it "raises a missing recipe exception when no recipe is found" do
24
+ File.stub(:directory?).and_return(true)
25
+ File.stub(:exists?).and_return(false)
26
+
27
+ expect { load_recipes { generic :missing_recipe } }.to raise_error(RuntimeError, /no missing_recipe recipe/)
28
+ end
29
+ end
30
+
31
+ context "from_application_path?" do
32
+ it "returns true if APP_PATH env variable is set" do
33
+ ENV['APP_PATH'] = "/app/path"
34
+
35
+ from_application_path?.should be_true
36
+ end
37
+
38
+ it "returns false if APP_PATH env variable is not set" do
39
+ ENV.delete('APP_PATH')
40
+
41
+ from_application_path?.should be_false
42
+ end
43
+ end
44
+ end
@@ -20,4 +20,26 @@ describe Pulsar::Helpers::Clamp do
20
20
  time_to_deploy.should_not == time
21
21
  end
22
22
  end
23
+
24
+ context "run_capistrano" do
25
+ before do
26
+ self.stub!(:config_path).and_return(dummy_conf_path)
27
+ self.stub!(:verbose?).and_return(false)
28
+ self.stub!(:capfile_path).and_return('/stubbed/capfile')
29
+ end
30
+
31
+ it "runs capistrano when pulsar is invoked from outside the application directory" do
32
+ self.should_receive(:run_cmd).with("bundle exec cap CONFIG_PATH=#{config_path} --file #{capfile_path} deploy", anything)
33
+
34
+ run_capistrano("deploy")
35
+ end
36
+
37
+ it "runs capistrano when pulsar is invoked from inside the application directory" do
38
+ self.stub!(:application_path).and_return("/app/path")
39
+
40
+ self.should_receive(:run_cmd).with("bundle exec cap CONFIG_PATH=#{config_path} APP_PATH=#{application_path} --file #{capfile_path} deploy", anything)
41
+
42
+ run_capistrano("deploy")
43
+ end
44
+ end
23
45
  end
data/spec/spec_helper.rb CHANGED
@@ -22,7 +22,10 @@ RSpec.configure do |config|
22
22
  config.include Helpers
23
23
  config.include OutputCapture
24
24
 
25
- config.before(:all) do
25
+ config.before(:each) do
26
+ Dir.stub(:home).and_return("/fake/home")
27
+
28
+ ENV.delete("PULSAR_APP_NAME")
26
29
  ENV.delete("PULSAR_CONF_REPO")
27
30
  end
28
31
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pulsar
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2013-04-10 00:00:00.000000000 Z
13
+ date: 2013-04-28 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: clamp
@@ -135,7 +135,8 @@ extra_rdoc_files: []
135
135
  files:
136
136
  - .gitignore
137
137
  - .rspec
138
- - .rvmrc
138
+ - .ruby-gemset
139
+ - .ruby-version
139
140
  - .travis.yml
140
141
  - Gemfile
141
142
  - LICENSE.txt
@@ -173,6 +174,7 @@ files:
173
174
  - spec/pulsar/commands/list_spec.rb
174
175
  - spec/pulsar/commands/main_spec.rb
175
176
  - spec/pulsar/commands/utils_spec.rb
177
+ - spec/pulsar/helpers/capistrano_spec.rb
176
178
  - spec/pulsar/helpers/clamp_spec.rb
177
179
  - spec/spec_helper.rb
178
180
  - spec/support/dummies/dummy_app/config.ru
@@ -191,7 +193,7 @@ files:
191
193
  - spec/support/modules/helpers.rb
192
194
  - spec/support/modules/output_capture.rb
193
195
  - spec/support/tmp/.gitkeep
194
- homepage: https://github.com/nebulab/pulsar
196
+ homepage: http://pulsar.nebulab.it
195
197
  licenses: []
196
198
  post_install_message:
197
199
  rdoc_options: []
@@ -205,7 +207,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
205
207
  version: '0'
206
208
  segments:
207
209
  - 0
208
- hash: 3212148214793715680
210
+ hash: 889216235847406742
209
211
  required_rubygems_version: !ruby/object:Gem::Requirement
210
212
  none: false
211
213
  requirements:
@@ -214,10 +216,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
214
216
  version: '0'
215
217
  segments:
216
218
  - 0
217
- hash: 3212148214793715680
219
+ hash: 889216235847406742
218
220
  requirements: []
219
221
  rubyforge_project:
220
- rubygems_version: 1.8.24
222
+ rubygems_version: 1.8.25
221
223
  signing_key:
222
224
  specification_version: 3
223
225
  summary: Pulsar helps with Capistrano configuration management. It uses a repository
@@ -228,6 +230,7 @@ test_files:
228
230
  - spec/pulsar/commands/list_spec.rb
229
231
  - spec/pulsar/commands/main_spec.rb
230
232
  - spec/pulsar/commands/utils_spec.rb
233
+ - spec/pulsar/helpers/capistrano_spec.rb
231
234
  - spec/pulsar/helpers/clamp_spec.rb
232
235
  - spec/spec_helper.rb
233
236
  - spec/support/dummies/dummy_app/config.ru
data/.rvmrc DELETED
@@ -1,51 +0,0 @@
1
- #!/usr/bin/env bash
2
-
3
- # This is an RVM Project .rvmrc file, used to automatically load the ruby
4
- # development environment upon cd'ing into the directory
5
-
6
- # First we specify our desired <ruby>[@<gemset>], the @gemset name is optional,
7
- # Only full ruby name is supported here, for short names use:
8
- # echo "rvm use 1.9.3" > .rvmrc
9
- environment_id="ruby-1.9.3-p286@pulsar"
10
-
11
- # Uncomment the following lines if you want to verify rvm version per project
12
- # rvmrc_rvm_version="1.16.13 (stable)" # 1.10.1 seams as a safe start
13
- # eval "$(echo ${rvm_version}.${rvmrc_rvm_version} | awk -F. '{print "[[ "$1*65536+$2*256+$3" -ge "$4*65536+$5*256+$6" ]]"}' )" || {
14
- # echo "This .rvmrc file requires at least RVM ${rvmrc_rvm_version}, aborting loading."
15
- # return 1
16
- # }
17
-
18
- # First we attempt to load the desired environment directly from the environment
19
- # file. This is very fast and efficient compared to running through the entire
20
- # CLI and selector. If you want feedback on which environment was used then
21
- # insert the word 'use' after --create as this triggers verbose mode.
22
- if [[ -d "${rvm_path:-$HOME/.rvm}/environments"
23
- && -s "${rvm_path:-$HOME/.rvm}/environments/$environment_id" ]]
24
- then
25
- \. "${rvm_path:-$HOME/.rvm}/environments/$environment_id"
26
- [[ -s "${rvm_path:-$HOME/.rvm}/hooks/after_use" ]] &&
27
- \. "${rvm_path:-$HOME/.rvm}/hooks/after_use" || true
28
- else
29
- # If the environment file has not yet been created, use the RVM CLI to select.
30
- rvm --create "$environment_id" || {
31
- echo "Failed to create RVM environment '${environment_id}'."
32
- return 1
33
- }
34
- fi
35
-
36
- # If you use bundler, this might be useful to you:
37
- if [[ -s Gemfile ]] && {
38
- ! builtin command -v bundle >/dev/null ||
39
- builtin command -v bundle | GREP_OPTIONS= \grep $rvm_path/bin/bundle >/dev/null
40
- }
41
- then
42
- printf "%b" "The rubygem 'bundler' is not installed. Installing it now.\n"
43
- gem install bundler
44
- fi
45
- if [[ -s Gemfile ]] && builtin command -v bundle >/dev/null
46
- then
47
- bundle install | GREP_OPTIONS= \grep -vE '^Using|Your bundle is complete'
48
- fi
49
-
50
- alias pulsar="ruby bin/pulsar"
51
- alias pulsar-utils="ruby bin/pulsar-utils"