foreman 0.26.1 → 0.27.0

Sign up to get free protection for your applications and to get access to all the features.
data/lib/foreman.rb CHANGED
@@ -4,5 +4,10 @@ module Foreman
4
4
 
5
5
  class AppDoesNotExist < Exception; end
6
6
 
7
+ # load contents of env_file into ENV
8
+ def self.load_env!(env_file = './.env')
9
+ require 'foreman/engine'
10
+ Foreman::Engine.load_env!(env_file)
11
+ end
7
12
  end
8
13
 
@@ -12,7 +12,6 @@ class Foreman::Engine
12
12
 
13
13
  attr_reader :procfile
14
14
  attr_reader :directory
15
- attr_reader :environment
16
15
  attr_reader :options
17
16
 
18
17
  extend Term::ANSIColor
@@ -26,6 +25,11 @@ class Foreman::Engine
26
25
  @environment = read_environment_files(options[:env])
27
26
  end
28
27
 
28
+ def self.load_env!(env_file)
29
+ @environment = read_environment_files(env_file)
30
+ apply_environment!
31
+ end
32
+
29
33
  def start
30
34
  proctitle "ruby: foreman master"
31
35
  termtitle "#{File.basename(@directory)} - foreman (#{processes.size} processes)"
@@ -73,7 +77,7 @@ private ######################################################################
73
77
  end
74
78
 
75
79
  def fork_individual(process, num, port)
76
- @environment.each { |k,v| ENV[k] = v }
80
+ apply_environment!
77
81
 
78
82
  ENV["PORT"] = port.to_s
79
83
  ENV["PS"] = "#{process.name}.#{num}"
@@ -175,27 +179,37 @@ private ######################################################################
175
179
  @current_color >= COLORS.length ? "" : COLORS[@current_color]
176
180
  end
177
181
 
178
- def read_environment_files(filenames)
179
- environment = {}
182
+ module Env
183
+ attr_reader :environment
180
184
 
181
- (filenames || "").split(",").map(&:strip).each do |filename|
182
- error "No such file: #{filename}" unless File.exists?(filename)
183
- environment.merge!(read_environment(filename))
184
- end
185
+ def read_environment_files(filenames)
186
+ environment = {}
185
187
 
186
- environment.merge!(read_environment(".env")) unless filenames
187
- environment
188
- end
188
+ (filenames || "").split(",").map(&:strip).each do |filename|
189
+ error "No such file: #{filename}" unless File.exists?(filename)
190
+ environment.merge!(read_environment(filename))
191
+ end
189
192
 
190
- def read_environment(filename)
191
- return {} unless File.exists?(filename)
193
+ environment.merge!(read_environment(".env")) unless filenames
194
+ environment
195
+ end
196
+
197
+ def read_environment(filename)
198
+ return {} unless File.exists?(filename)
192
199
 
193
- File.read(filename).split("\n").inject({}) do |hash, line|
194
- if line =~ /\A([A-Za-z_0-9]+)=(.*)\z/
195
- hash[$1] = $2
200
+ File.read(filename).split("\n").inject({}) do |hash, line|
201
+ if line =~ /\A([A-Za-z_0-9]+)=(.*)\z/
202
+ hash[$1] = $2
203
+ end
204
+ hash
196
205
  end
197
- hash
206
+ end
207
+
208
+ def apply_environment!
209
+ @environment.each { |k,v| ENV[k] = v }
198
210
  end
199
211
  end
200
212
 
213
+ include Env
214
+ extend Env
201
215
  end
@@ -1,5 +1,5 @@
1
1
  module Foreman
2
2
 
3
- VERSION = "0.26.1"
3
+ VERSION = "0.27.0"
4
4
 
5
5
  end
data/spec/foreman_spec.rb CHANGED
@@ -8,4 +8,26 @@ describe Foreman do
8
8
  it { should be_a String }
9
9
  end
10
10
 
11
+ describe "::load_env!(env_file)" do
12
+ before do
13
+ FakeFS.activate!
14
+ end
15
+
16
+ after do
17
+ FakeFS.deactivate!
18
+ ENV['FOO'] = nil
19
+ end
20
+
21
+ it "should load env_file into ENV" do
22
+ File.open("/tmp/env1", "w") { |f| f.puts("FOO=bar") }
23
+ Foreman.load_env!("/tmp/env1")
24
+ ENV['FOO'].should == 'bar'
25
+ end
26
+
27
+ it "should assume env_file in ./.env" do
28
+ File.open("./.env", "w") { |f| f.puts("FOO=bar") }
29
+ Foreman.load_env!
30
+ ENV['FOO'].should == 'bar'
31
+ end
32
+ end
11
33
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: foreman
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.26.1
4
+ version: 0.27.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: 2011-11-10 00:00:00.000000000Z
12
+ date: 2011-12-05 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: term-ansicolor
16
- requirement: &70198523224520 !ruby/object:Gem::Requirement
16
+ requirement: &70283570808260 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 1.0.5
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70198523224520
24
+ version_requirements: *70283570808260
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: thor
27
- requirement: &70198523222660 !ruby/object:Gem::Requirement
27
+ requirement: &70283570807760 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,7 +32,7 @@ dependencies:
32
32
  version: 0.13.6
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70198523222660
35
+ version_requirements: *70283570807760
36
36
  description: Process manager for applications with multiple components
37
37
  email: ddollar@gmail.com
38
38
  executables:
@@ -104,7 +104,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
104
104
  version: '0'
105
105
  segments:
106
106
  - 0
107
- hash: 1174772449169708218
107
+ hash: -3613490576676930257
108
108
  required_rubygems_version: !ruby/object:Gem::Requirement
109
109
  none: false
110
110
  requirements:
@@ -113,7 +113,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
113
113
  version: '0'
114
114
  segments:
115
115
  - 0
116
- hash: 1174772449169708218
116
+ hash: -3613490576676930257
117
117
  requirements: []
118
118
  rubyforge_project:
119
119
  rubygems_version: 1.8.10