Sha256: adeb2edaac89636b1446959fc6bcf7b09de98bc9acd3d3ccdf3c97b95c7975bb

Contents?: true

Size: 1.29 KB

Versions: 1

Compression:

Stored size: 1.29 KB

Contents

module Dry
  module Protocol
    class NotImplemented < StandardError
      attr_reader :proto, :details

      def initialize(type, proto, **details)
        @proto, @details = proto, details

        @details[:message] =
          case type
          when :protocol
            "Protocol “#{@proto}” is not implemented for “#{@details[:receiver].class}”."
          when :method
            "Protocol “#{@proto}” does not declare method “#{@details[:method]}”."
          when :nested
            "Protocol “#{@proto}” failed to invoke the implementation for\n" \
            " ⮩    “#{@details[:receiver].class}##{@details[:method]}”.\n" \
            " ⮩  Caused by “#{cause.class}” with a message\n" \
            " ⮩    “#{cause.message}”\n" \
            " ⮩  Rescue this exception and inspect `NotImplemented#cause' for details."
          else
            "Protocol “#{proto}” is invalid."
          end

        super(@details[:message])

        if @details[:cause]
          set_backtrace(
            @details[:cause].backtrace.reject do |line| # FIXME drop_while ??
              line =~ %r[dry-behaviour/lib/dry/behaviour]
            end
          )
        end
      end

      def cause
        @details[:cause] ||= super
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
dry-behaviour-0.8.0 lib/dry/errors/not_implemented.rb