Sha256: 36c8aa3cbff71972434edb3d3030d4f67a68b5861558a7aa3d6a890b94bba50b

Contents?: true

Size: 882 Bytes

Versions: 7

Compression:

Stored size: 882 Bytes

Contents

# frozen_string_literal: true

require "dry/equalizer"

require "dry/schema/message/or/abstract"
require "dry/schema/path"

module Dry
  module Schema
    class Message
      module Or
        # A message type used by OR operations with different paths
        #
        # @api public
        class MultiPath < Abstract
          # @api private
          attr_reader :root

          # @api private
          def initialize(*args)
            super
            @root = [left, right].flatten.map(&:_path).reduce(:&)
            @left = left.map { |msg| msg.to_or(root) }
            @right = right.map { |msg| msg.to_or(root) }
          end

          # @api public
          def to_h
            @to_h ||= Path[[*root, :or]].to_h(
              [left.map(&:to_h).reduce(:merge), right.map(&:to_h).reduce(:merge)]
            )
          end
        end
      end
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
dry-schema-1.5.6 lib/dry/schema/message/or/multi_path.rb
dry-schema-1.5.5 lib/dry/schema/message/or/multi_path.rb
dry-schema-1.5.4 lib/dry/schema/message/or/multi_path.rb
dry-schema-1.5.3 lib/dry/schema/message/or/multi_path.rb
dry-schema-1.5.2 lib/dry/schema/message/or/multi_path.rb
dry-schema-1.5.1 lib/dry/schema/message/or/multi_path.rb
dry-schema-1.5.0 lib/dry/schema/message/or/multi_path.rb