Sha256: 87de400e66195ed115f77fba51ecc5b4b1d7d3c62782d9b195301d10dd974508

Contents?: true

Size: 1.65 KB

Versions: 2

Compression:

Stored size: 1.65 KB

Contents

# frozen_string_literal: true

require 'dry/equalizer'

require 'dry/schema/constants'
require 'dry/schema/message'

module Dry
  module Validation
    # Message message
    #
    # @api public
    class Message < Schema::Message
      include Dry::Equalizer(:text, :path, :meta)

      # @!attribute [r] text
      #   @return [String] text The error message text
      attr_reader :text

      # @!attribute [r] path
      #   @return [Array<Symbol, Integer>] path The path to the value with the error
      attr_reader :path

      # @!attribute [r] meta
      #   @return [Hash] meta Optional hash with meta-data
      attr_reader :meta

      # @api public
      class Localized < Message
        # @api public
        def evaluate(**opts)
          evaluated_text, rest = text.(opts)
          Message.new(evaluated_text, path: path, meta: rest.merge(meta))
        end
      end

      # Build an error
      #
      # @return [Message, Message::Localized]
      #
      # @api public
      def self.[](text, path, meta)
        klass = text.respond_to?(:call) ? Localized : Message
        klass.new(text, path: path, meta: meta)
      end

      # Initialize a new error object
      #
      # @api private
      def initialize(text, path:, meta: EMPTY_HASH)
        @text = text
        @path = Array(path)
        @meta = meta
      end

      # Check if this is a base error not associated with any key
      #
      # @return [Boolean]
      #
      # @api public
      def base?
        @base ||= path.compact.empty?
      end

      # Dump error to a string
      #
      # @return [String]
      #
      # @api public
      def to_s
        text
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
dry-validation-1.0.0.rc1 lib/dry/validation/message.rb
dry-validation-1.0.0.beta2 lib/dry/validation/message.rb