Module: ExceptionExtensions::CauseEnumerable

Included in:
StandardErrorCollection
Defined in:
lib/exception_extensions/cause_enumerable.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(klass) ⇒ Object



3
4
5
6
7
8
9
# File 'lib/exception_extensions/cause_enumerable.rb', line 3

def self.included(klass)
  raise "The ::ExceptionExtensions::CauseEnumerable module is only applicable to ::Exception types" unless klass.ancestors.include?(::Exception)
  klass.class_eval do
    include Enumerable
    attr_reader :causes
  end
end

Instance Method Details

#each(&block) ⇒ Object



23
24
25
# File 'lib/exception_extensions/cause_enumerable.rb', line 23

def each(&block)
  @causes.each(&block)
end

#initialize(causes, message = nil) ⇒ Object



11
12
13
14
15
16
17
18
19
20
21
# File 'lib/exception_extensions/cause_enumerable.rb', line 11

def initialize(causes, message = nil)
  validate(causes)
  @causes = causes
  if message.nil?
    # generate a message from the collection of causes
    cause_messages = @causes.map { |cause| "Exception: #{cause.message}" }
    message = "Multiple exceptions occurred! #{cause_messages.join('. ')}"
  end
  # add the message to this exception
  super(message)
end