Sha256: 0ce19fc49ca8d75a98cdacd8061360a66c24d9307fccb828b9d551cf6d2476a2

Contents?: true

Size: 1.41 KB

Versions: 4

Compression:

Stored size: 1.41 KB

Contents

# frozen_string_literal: true

require 'dry/schema/macros/dsl'

module Dry
  module Schema
    module Macros
      # A macro used for specifying predicates to be applied to values from a hash
      #
      # @api private
      class Value < DSL
        # @api private
        def call(*predicates, **opts, &block)
          schema = predicates.detect { |predicate| predicate.is_a?(Processor) }

          if schema
            current_type = schema_dsl.types[name]

            updated_type =
              if current_type.respond_to?(:of)
                current_type.of(schema.type_schema)
              else
                schema.type_schema
              end

            schema_dsl.set_type(name, updated_type)
          end

          trace.evaluate(*predicates, **opts)
          trace.append(new(chain: false).instance_exec(&block)) if block

          if trace.captures.empty?
            raise ArgumentError, 'wrong number of arguments (given 0, expected at least 1)'
          end

          self
        end

        # @api private
        def respond_to_missing?(meth, include_private = false)
          super || meth.to_s.end_with?(QUESTION_MARK)
        end

        private

        # @api private
        def method_missing(meth, *args, &block)
          if meth.to_s.end_with?(QUESTION_MARK)
            trace.__send__(meth, *args, &block)
          else
            super
          end
        end
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
dry-schema-1.0.3 lib/dry/schema/macros/value.rb
dry-schema-1.0.2 lib/dry/schema/macros/value.rb
dry-schema-1.0.1 lib/dry/schema/macros/value.rb
dry-schema-1.0.0 lib/dry/schema/macros/value.rb