blambeau/qrb

View on GitHub
lib/finitio/errors.rb

Summary

Maintainability
A
0 mins
Test Coverage
module Finitio

  class Error < StandardError

    def initialize(msg, cause = nil)
      super(msg)
      @cause = cause
    end
    attr_reader :cause

    def root_cause(sandbox = true)
      # 1) no deeper cause, it's me
      return self if cause.nil?

      # 2) not a Finitio cause and sandbox
      return self if sandbox and not cause.is_a?(Error)

      # 3) cause may not go deeper
      return cause unless cause.respond_to?(:root_cause)

      # 4) delegate
      cause.root_cause
    end

  end # class Error

  class TypeError < Error

    def initialize(msg, cause = nil, location = nil)
      super(msg, cause)
      @location = location || ''
    end
    attr_reader :location

  end # class TypeError

end # module Finitio