Sha256: a89a29cf52e1d819b977497eef785283f472d1c9ee4061d8f6bbee79cd570332

Contents?: true

Size: 1.74 KB

Versions: 10

Compression:

Stored size: 1.74 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."
          when :arity
            "Attempt to implement “#{@proto}#@details[:method]}”\n" \
            " ⮩    with a wrong arity for “#{@details[:target]}”.\n" \
            " ⮩  Expected parameters types:\n" \
            " ⮩    “#{@details[:expected]}”\n" \
            " ⮩  Provided parameters types:\n" \
            " ⮩    “#{@details[:provided]}”\n" \
            " ⮩  Please consider providing a proper implementation."
          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

10 entries across 10 versions & 1 rubygems

Version Path
dry-behaviour-0.12.1 lib/dry/errors/not_implemented.rb
dry-behaviour-0.12.0 lib/dry/errors/not_implemented.rb
dry-behaviour-0.11.2 lib/dry/errors/not_implemented.rb
dry-behaviour-0.11.1 lib/dry/errors/not_implemented.rb
dry-behaviour-0.11.0 lib/dry/errors/not_implemented.rb
dry-behaviour-0.10.4 lib/dry/errors/not_implemented.rb
dry-behaviour-0.10.3 lib/dry/errors/not_implemented.rb
dry-behaviour-0.10.2 lib/dry/errors/not_implemented.rb
dry-behaviour-0.10.1 lib/dry/errors/not_implemented.rb
dry-behaviour-0.9.0 lib/dry/errors/not_implemented.rb