From: Michal Fojtik <[email protected]>

This patch fixed the case when the exception DSL is
used more than once (typically on driver switching).
In that case the new exceptions will override the exceptions
from the previous driver.

Signed-off-by: Michal fojtik <[email protected]>
---
 server/lib/deltacloud/drivers/base_driver.rb |  4 ----
 server/lib/deltacloud/drivers/exceptions.rb  | 18 +++++++++++++-----
 2 files changed, 13 insertions(+), 9 deletions(-)

diff --git a/server/lib/deltacloud/drivers/base_driver.rb 
b/server/lib/deltacloud/drivers/base_driver.rb
index 3b37721..934c912 100644
--- a/server/lib/deltacloud/drivers/base_driver.rb
+++ b/server/lib/deltacloud/drivers/base_driver.rb
@@ -64,10 +64,6 @@ module Deltacloud
       self.class.name.split('::').last.gsub('Driver', '').downcase
     end
 
-    def self.exceptions(&block)
-      ExceptionHandler::exceptions(&block)
-    end
-
     def self.define_hardware_profile(profile_id, &block)
       @hardware_profiles ||= []
       hw_profile = @hardware_profiles.find{|e| e.id == profile_id }
diff --git a/server/lib/deltacloud/drivers/exceptions.rb 
b/server/lib/deltacloud/drivers/exceptions.rb
index 5e679a5..1a635ce 100644
--- a/server/lib/deltacloud/drivers/exceptions.rb
+++ b/server/lib/deltacloud/drivers/exceptions.rb
@@ -171,9 +171,15 @@ module Deltacloud
       end
     end
 
-    def self.exceptions(&block)
-      @definitions = Exceptions.new(&block).exception_definitions if 
block_given?
-      @definitions
+    module DSL
+      def exceptions(&block)
+        @definitions = Exceptions.new(&block).exception_definitions if 
block_given?
+        @definitions
+      end
+    end
+
+    def self.included(klass)
+      klass.extend(DSL)
     end
 
     def safely(&block)
@@ -181,7 +187,7 @@ module Deltacloud
         block.call
       rescue
         report_method = $stderr.respond_to?(:err) ? :err : :puts
-        Deltacloud::ExceptionHandler::exceptions.each do |exdef|
+        self.class.exceptions.each do |exdef|
           if exdef.match?($!)
             new_exception = exdef.handler($!)
             m = (new_exception && !new_exception.message.nil?) ? 
new_exception.message : $!.message
@@ -191,7 +197,9 @@ module Deltacloud
             raise exdef.handler($!) unless new_exception.nil?
           end
         end
-        $stderr.send(report_method, "[NO HANDLED] #{[$!.class.to_s, 
$!.message].join(': ')}\n#{$!.backtrace.join("\n")}")
+        unless ENV['RACK_ENV'] == 'test'
+          $stderr.send(report_method, "[NO HANDLED] #{[$!.class.to_s, 
$!.message].join(': ')}\n#{$!.backtrace.join("\n")}")
+        end
         raise Deltacloud::ExceptionHandler::BackendError.new($!, "Unhandled 
exception or status code (#{$!.message})")
       end
     end
-- 
1.7.12

Reply via email to