From 79cf541ebefc82b47efe1b0839d0a04c6e440c46 Mon Sep 17 00:00:00 2001 From: Chris Continanza Date: Sat, 3 Dec 2011 15:43:07 -0800 Subject: [PATCH] refactor engine to expose env methods --- lib/foreman/engine.rb | 52 +++++++++++++++++++++++++++---------------- 1 file changed, 33 insertions(+), 19 deletions(-) diff --git a/lib/foreman/engine.rb b/lib/foreman/engine.rb index c74c9cb..b217644 100644 --- a/lib/foreman/engine.rb +++ b/lib/foreman/engine.rb @@ -12,7 +12,6 @@ class Foreman::Engine attr_reader :procfile attr_reader :directory - attr_reader :environment attr_reader :options extend Term::ANSIColor @@ -26,6 +25,11 @@ class Foreman::Engine @environment = read_environment_files(options[:env]) end + def self.load_env(env_file) + @environment = read_environment_files(env_file) + load_env! + end + def start proctitle "ruby: foreman master" termtitle "#{File.basename(@directory)} - foreman (#{processes.size} processes)" @@ -73,7 +77,7 @@ private ###################################################################### end def fork_individual(process, num, port) - @environment.each { |k,v| ENV[k] = v } + load_env! ENV["PORT"] = port.to_s ENV["PS"] = "#{process.name}.#{num}" @@ -175,27 +179,37 @@ private ###################################################################### @current_color >= COLORS.length ? "" : COLORS[@current_color] end - def read_environment_files(filenames) - environment = {} + module Env + attr_reader :environment - (filenames || "").split(",").map(&:strip).each do |filename| - error "No such file: #{filename}" unless File.exists?(filename) - environment.merge!(read_environment(filename)) - end + def read_environment_files(filenames) + environment = {} - environment.merge!(read_environment(".env")) unless filenames - environment - end - - def read_environment(filename) - return {} unless File.exists?(filename) - - File.read(filename).split("\n").inject({}) do |hash, line| - if line =~ /\A([A-Za-z_0-9]+)=(.*)\z/ - hash[$1] = $2 + (filenames || "").split(",").map(&:strip).each do |filename| + error "No such file: #{filename}" unless File.exists?(filename) + environment.merge!(read_environment(filename)) end - hash + + environment.merge!(read_environment(".env")) unless filenames + environment + end + + def read_environment(filename) + return {} unless File.exists?(filename) + + File.read(filename).split("\n").inject({}) do |hash, line| + if line =~ /\A([A-Za-z_0-9]+)=(.*)\z/ + hash[$1] = $2 + end + hash + end + end + + def load_env! + @environment.each { |k,v| ENV[k] = v } end end + include Env + extend Env end