From e245026f655d4b1b0a577e2571f6da3eaa83d203 Mon Sep 17 00:00:00 2001 From: Klaas Jan Wierenga Date: Fri, 3 May 2013 21:31:07 +0200 Subject: [PATCH] Fail with an error on Ruby 1.8 when posix-spawn is not present. --- lib/foreman/cli.rb | 9 +++++++++ spec/foreman/cli_spec.rb | 8 ++++++++ 2 files changed, 17 insertions(+) diff --git a/lib/foreman/cli.rb b/lib/foreman/cli.rb index 8ee1d17..f2f5059 100644 --- a/lib/foreman/cli.rb +++ b/lib/foreman/cli.rb @@ -34,6 +34,7 @@ class Foreman::CLI < Thor end def start(process=nil) + require_posix_spawn_for_ruby_18! check_procfile! load_environment! engine.load_procfile(procfile) @@ -137,6 +138,14 @@ private ###################################################################### end end + def require_posix_spawn_for_ruby_18! + begin + Kernel.require 'posix/spawn' # Use Kernel explicitly so we can mock the require call in the spec + rescue LoadError + error "foreman requires gem `posix-spawn` on Ruby #{RUBY_VERSION}. Please `gem install posix-spawn`." + end if Foreman.ruby_18? + end + def procfile case when options[:procfile] then options[:procfile] diff --git a/spec/foreman/cli_spec.rb b/spec/foreman/cli_spec.rb index 26cfa42..da41edf 100644 --- a/spec/foreman/cli_spec.rb +++ b/spec/foreman/cli_spec.rb @@ -100,4 +100,12 @@ describe "Foreman::CLI", :fakefs do end end + describe "when posix-spawn is not present on ruby 1.8" do + it "should fail with an error" do + mock(Kernel).require('posix/spawn') { raise LoadError } + output = foreman("start -f #{resource_path("Procfile")}") + output.should == "ERROR: foreman requires gem `posix-spawn` on Ruby #{RUBY_VERSION}. Please `gem install posix-spawn`.\n" + end + end if running_ruby_18? + end