From 7d6de5b2a7a364bf3ac28da4cf51082bea26a296 Mon Sep 17 00:00:00 2001 From: Szymon Nowak Date: Tue, 14 Aug 2012 11:09:21 +0200 Subject: [PATCH] Handle multiline strings in .env file --- lib/foreman/env.rb | 4 +++- spec/foreman/engine_spec.rb | 8 ++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/lib/foreman/env.rb b/lib/foreman/env.rb index 788c1e4..ff579da 100644 --- a/lib/foreman/env.rb +++ b/lib/foreman/env.rb @@ -9,8 +9,10 @@ class Foreman::Env if line =~ /\A([A-Za-z_0-9]+)=(.*)\z/ key = $1 case val = $2 + # Remove single quotes when /\A'(.*)'\z/ then ax[key] = $1 - when /\A"(.*)"\z/ then ax[key] = $1.gsub(/\\(.)/, '\1') + # Remove double quotes and unescape string preserving newline characters + when /\A"(.*)"\z/ then ax[key] = $1.gsub('\n', "\n").gsub(/\\(.)/, '\1') else ax[key] = val end end diff --git a/spec/foreman/engine_spec.rb b/spec/foreman/engine_spec.rb index d759892..85db31e 100644 --- a/spec/foreman/engine_spec.rb +++ b/spec/foreman/engine_spec.rb @@ -90,6 +90,14 @@ describe "Foreman::Engine", :fakefs do subject.env["OTHER"].should == 'escaped"quote' end + it "should handle multiline strings" do + File.open("/tmp/env", "w") do |f| + f.puts 'FOO="bar\nbaz"' + end + subject.load_env "/tmp/env" + subject.env["FOO"].should == "bar\nbaz" + end + it "should fail if specified and doesnt exist" do lambda { subject.load_env "/tmp/env" }.should raise_error(Errno::ENOENT) end