Sha256: bea7cbd10569bff0d41e1e9eb308d1ce084a6f0bffd09a132e071a7c284ad10e

Contents?: true

Size: 1.96 KB

Versions: 40

Compression:

Stored size: 1.96 KB

Contents

module Dynflow
  module ExecutionPlan::Steps
    class Error < Serializable
      extend Algebrick::Matching
      include Algebrick::TypeCheck

      attr_reader :exception_class, :message, :backtrace

      def self.new(*args)
        case args.size
        when 1
          match obj = args.first,
                (on String do
                  super(StandardError, obj, caller, nil)
                end),
                (on Exception do
                  super(obj.class, obj.message, obj.backtrace, obj)
                end)
        when 3, 4
          super(*args.values_at(0..3))
        else
          raise ArgumentError, "wrong number of arguments #{args}"
        end
      end

      def initialize(exception_class, message, backtrace, exception)
        @exception_class = Child! exception_class, Exception
        @message         = Type! message, String
        @backtrace       = Type! backtrace, Array
        @exception       = Type! exception, Exception, NilClass
      end

      def self.new_from_hash(hash)
        exception_class = begin
                            Utils.constantize(hash[:exception_class])
                          rescue NameError
                            Errors::UnknownError.for_exception_class(hash[:exception_class])
                          end
        self.new(exception_class, hash[:message], hash[:backtrace], nil)
      end

      def to_hash
        recursive_to_hash class:           self.class.name,
                          exception_class: exception_class.to_s,
                          message:         message,
                          backtrace:       backtrace
      end

      def to_s
        format '%s (%s)\n%s',
               (@exception || self).message,
               (@exception ? @exception.class : exception_class),
               (@exception || self).backtrace
      end

      def exception
        @exception ||
          exception_class.exception(message).tap { |e| e.set_backtrace backtrace }
      end
    end
  end
end

Version data entries

40 entries across 40 versions & 1 rubygems

Version Path
dynflow-1.3.0 lib/dynflow/execution_plan/steps/error.rb
dynflow-1.2.3 lib/dynflow/execution_plan/steps/error.rb
dynflow-1.2.2 lib/dynflow/execution_plan/steps/error.rb
dynflow-1.2.1 lib/dynflow/execution_plan/steps/error.rb
dynflow-1.2.0 lib/dynflow/execution_plan/steps/error.rb
dynflow-1.2.0.pre1 lib/dynflow/execution_plan/steps/error.rb
dynflow-1.1.6 lib/dynflow/execution_plan/steps/error.rb
dynflow-1.1.5 lib/dynflow/execution_plan/steps/error.rb
dynflow-1.1.4 lib/dynflow/execution_plan/steps/error.rb
dynflow-1.1.3 lib/dynflow/execution_plan/steps/error.rb
dynflow-1.1.2 lib/dynflow/execution_plan/steps/error.rb
dynflow-1.1.1 lib/dynflow/execution_plan/steps/error.rb
dynflow-1.1.0 lib/dynflow/execution_plan/steps/error.rb
dynflow-1.0.5 lib/dynflow/execution_plan/steps/error.rb
dynflow-1.0.4 lib/dynflow/execution_plan/steps/error.rb
dynflow-1.0.3 lib/dynflow/execution_plan/steps/error.rb
dynflow-1.0.2 lib/dynflow/execution_plan/steps/error.rb
dynflow-1.0.1 lib/dynflow/execution_plan/steps/error.rb
dynflow-1.0.0 lib/dynflow/execution_plan/steps/error.rb
dynflow-0.8.37 lib/dynflow/execution_plan/steps/error.rb