# frozen_string_literal: true module Strict class MethodReturnError < Error attr_reader :verifiable_method, :value def initialize(verifiable_method:, value:) super(message_from(verifiable_method:, value:)) @verifiable_method = verifiable_method @value = value end private def message_from(verifiable_method:, value:) details = invalid_returns_message_from(verifiable_method, value) "#{verifiable_method}'s return value was invalid because:\n#{details}" end def invalid_returns_message_from(verifiable_method, value) " - got #{value.inspect}, expected #{verifiable_method.returns.validator.inspect}" end end end