diff --git a/lib/foreman/cli.rb b/lib/foreman/cli.rb index 8625305..32db1a6 100644 --- a/lib/foreman/cli.rb +++ b/lib/foreman/cli.rb @@ -13,6 +13,13 @@ class Foreman::CLI < Thor Foreman::Engine.new(procfile).start end + desc "execute PROCESS [PROCFILE]", "Run an instance of the specified process from PROCFILE" + + def execute(process, procfile="Procfile") + error "#{procfile} does not exist." unless procfile_exists?(procfile) + Foreman::Engine.new(procfile).execute(process) + end + desc "export APP [PROCFILE] [FORMAT]", "Export the app described in PROCFILE as APP to another FORMAT" def export(app, procfile="Procfile", format="upstart") diff --git a/spec/foreman/cli_spec.rb b/spec/foreman/cli_spec.rb index 70317ba..5468a5d 100644 --- a/spec/foreman/cli_spec.rb +++ b/spec/foreman/cli_spec.rb @@ -25,6 +25,27 @@ describe "Foreman::CLI" do end end + describe "execute" do + describe "with a non-existent Procfile" do + it "prints an error" do + mock_error(subject, "Procfile does not exist.") do + dont_allow.instance_of(Foreman::Engine).start + subject.execute("alpha") + end + end + end + + describe "with a Procfile" do + before(:each) { write_procfile } + + it "runs successfully" do + dont_allow(subject).error + mock.instance_of(Foreman::Engine).execute("alpha") + subject.execute("alpha") + end + end + end + describe "export" do describe "with a non-existent Procfile" do it "prints an error" do diff --git a/spec/foreman/engine_spec.rb b/spec/foreman/engine_spec.rb index f2aae70..827421e 100644 --- a/spec/foreman/engine_spec.rb +++ b/spec/foreman/engine_spec.rb @@ -29,4 +29,12 @@ describe "Foreman::Engine" do subject.start end end + + describe "execute" do + it "runs the processes" do + write_procfile + mock(subject).run(subject.processes["alpha"], false) + subject.execute("alpha") + end + end end