module Qpid::Proton::ExceptionHandling
Provides mixin functionality for dealing with exception conditions.
Public Class Methods
included(base)
click to toggle source
# File lib/qpid_proton/exception_handling.rb, line 28 def self.included(base) base.extend(self) unless defined? base.to_be_wrapped class << base @@to_be_wrapped = [] end end define_method :method_added do |name| if (!@@to_be_wrapped.nil?) && (@@to_be_wrapped.include? name) @@to_be_wrapped.delete name create_exception_handler_wrapper(name) end end end
Public Instance Methods
can_raise_exception(method_names)
click to toggle source
# File lib/qpid_proton/exception_handling.rb, line 45 def can_raise_exception(method_names) # coerce the names to be an array Array(method_names).each do |method_name| # if the method doesn't already exist then queue this aliasing unless self.method_defined? method_name @@to_be_wrapped ||= [] @@to_be_wrapped << method_name else create_exception_handler_wrapper(method_name) end end end
check_for_error(code)
click to toggle source
Raises an Proton-specific error if a return code is non-zero.
Expects the class to provide an error
method.
# File lib/qpid_proton/exception_handling.rb, line 74 def check_for_error(code) raise ::ArgumentError.new("Invalid error code: #{code}") if code.nil? return code if code > 0 case(code) when Qpid::Proton::Error::NONE return when Qpid::Proton::Error::EOS raise Qpid::Proton::EOSError.new(self.error) when Qpid::Proton::Error::ERROR raise Qpid::Proton::ProtonError.new(self.error) when Qpid::Proton::Error::OVERFLOW raise Qpid::Proton::OverflowError.new(self.error) when Qpid::Proton::Error::UNDERFLOW raise Qpid::Proton::UnderflowError.new(self.error) when Qpid::Proton::Error::ARGUMENT raise Qpid::Proton::ArgumentError.new(self.error) when Qpid::Proton::Error::STATE raise Qpid::Proton::StateError.new(self.error) when Qpid::Proton::Error::TIMEOUT raise Qpid::Proton::TimeoutError.new(self.error) when Qpid::Proton::Error::INPROGRESS return when Qpid::Proton::Error::INTERRUPTED raise Qpid::Proton::InterruptedError.new(self.error) when Qpid::Proton::Error::INPROGRESS raise Qpid::Proton::InProgressError.new(self.error) else raise ::ArgumentError.new("Unknown error code: #{code}") end end
create_exception_handler_wrapper(method_name)
click to toggle source
# File lib/qpid_proton/exception_handling.rb, line 58 def create_exception_handler_wrapper(method_name) original_method_name = method_name.to_s wrapped_method_name = "_excwrap_#{original_method_name}" alias_method wrapped_method_name, original_method_name define_method original_method_name do |*args, &block| # need to get a reference to the method object itself since # calls to Class.send interfere with Messenger.send method = self.method(wrapped_method_name.to_sym) rc = method.call(*args, &block) check_for_error(rc) end end