module ExceptionalSynchrony::CallbackExceptions
Public Class Methods
ensure_callback(deferrable, &block)
click to toggle source
# File lib/exceptional_synchrony/callback_exceptions.rb, line 6 def ensure_callback(deferrable, &block) result = return_exception(&block) deferrable.succeed(*Array(result)) end
map_deferred_result(deferrable)
click to toggle source
# File lib/exceptional_synchrony/callback_exceptions.rb, line 11 def map_deferred_result(deferrable) deferred_status = deferrable.instance_variable_get(:@deferred_status) deferred_args = deferrable.instance_variable_get(:@deferred_args) result = (deferred_args && deferred_args.size == 1) ? deferred_args.first : deferred_args case deferred_status when :succeeded if result.is_a?(Exception) raise result else result end when :failed if result.respond_to?(:error) handle_result_error(result) else raise_failure_for_result(result) end else raise ArgumentError, "No deferred status set yet: #{deferred_status.inspect} #{truncated_inspect(result)}" end end
return_exception(*args) { |*args| ... }
click to toggle source
# File lib/exceptional_synchrony/callback_exceptions.rb, line 34 def return_exception(*args) begin yield *args rescue Exception => ex ex end end
Private Class Methods
error_is_a_timeout?(error)
click to toggle source
# File lib/exceptional_synchrony/callback_exceptions.rb, line 70 def error_is_a_timeout?(error) error =~ /timeout/i || error == Errno::ETIMEDOUT end
handle_result_error(result)
click to toggle source
# File lib/exceptional_synchrony/callback_exceptions.rb, line 44 def handle_result_error(result) error = result.error if error_is_a_timeout?(error) raise Timeout::Error else raise_failure_for_result(result, error: error) end end
raise_failure_for_result(result, error: nil)
click to toggle source
# File lib/exceptional_synchrony/callback_exceptions.rb, line 53 def raise_failure_for_result(result, error: nil) result_string = truncated_inspect(result) error_string = if error "ERROR = #{truncated_inspect(error)}; " end raise Failure, "#{error_string}RESULT = #{result_string}" end
truncated_inspect(obj)
click to toggle source
# File lib/exceptional_synchrony/callback_exceptions.rb, line 61 def truncated_inspect(obj) inspection = obj.inspect[0, 101] if inspection.length > 100 inspection[0, 92] + '...TRUNC' else inspection end end