diff --git a/lib/linux_admin/common.rb b/lib/linux_admin/common.rb index 3491afd..4232fda 100644 --- a/lib/linux_admin/common.rb +++ b/lib/linux_admin/common.rb @@ -24,7 +24,10 @@ def run(cmd, options = {}) error ||= "" self.exitstatus = nil end - + rescue Errno::ENOENT => err + raise NoSuchFileError.new(err.message) if NoSuchFileError.detected?(err.message) + raise + else CommandResult.new(output, error, status) end diff --git a/lib/linux_admin/exceptions.rb b/lib/linux_admin/exceptions.rb index 50a980c..df46e7a 100644 --- a/lib/linux_admin/exceptions.rb +++ b/lib/linux_admin/exceptions.rb @@ -8,6 +8,16 @@ def initialize(message, result) end class LinuxAdmin + class NoSuchFileError < Errno::ENOENT + def initialize(message) + super(message.split("No such file or directory -").last.split(" ").first) + end + + def self.detected?(message) + message.start_with?("No such file or directory -") + end + end + class CredentialError < CommandResultError def initialize(result) super("Invalid username or password", result) diff --git a/spec/common_spec.rb b/spec/common_spec.rb index 1186d69..9a38a11 100644 --- a/spec/common_spec.rb +++ b/spec/common_spec.rb @@ -100,7 +100,7 @@ class TestClass end it "command bad" do - expect {subject.send(run_method, "XXXXX")}.to raise_error(Errno::ENOENT) + expect {subject.send(run_method, "XXXXX --user=bob")}.to raise_error(LinuxAdmin::NoSuchFileError, "No such file or directory - XXXXX") end context "#exit_status" do