Sha256: 409e6aa0ad441d55722f0dae2df7c7c4f2880aead12dfce61ea734d469a0793e

Contents?: true

Size: 1.12 KB

Versions: 14

Compression:

Stored size: 1.12 KB

Contents

# frozen_string_literal: true

require 'dry/initializer'

require 'dry/schema/constants'
require 'dry/schema/config'
require 'dry/schema/result'
require 'dry/schema/messages'
require 'dry/schema/message_compiler'

module Dry
  module Schema
    # Applies rules defined within the DSL
    #
    # @api private
    class RuleApplier
      extend Dry::Initializer

      # @api private
      param :rules

      # @api private
      option :config, default: -> { Config.new }

      # @api private
      option :message_compiler, default: -> { MessageCompiler.new(Messages.setup(config.messages)) }

      # @api private
      def call(input)
        results = EMPTY_ARRAY.dup

        rules.each do |name, rule|
          next if input.error?(name)

          result = rule.(input.to_h)
          results << result if result.failure?
        end

        input.concat(results)
      end

      # @api private
      def to_ast
        if config.messages.namespace
          [:namespace, [config.messages.namespace, [:set, rules.values.map(&:to_ast)]]]
        else
          [:set, rules.values.map(&:to_ast)]
        end
      end
    end
  end
end

Version data entries

14 entries across 14 versions & 1 rubygems

Version Path
dry-schema-1.4.3 lib/dry/schema/rule_applier.rb
dry-schema-1.4.2 lib/dry/schema/rule_applier.rb
dry-schema-1.4.1 lib/dry/schema/rule_applier.rb
dry-schema-1.4.0 lib/dry/schema/rule_applier.rb
dry-schema-1.3.4 lib/dry/schema/rule_applier.rb
dry-schema-1.3.3 lib/dry/schema/rule_applier.rb
dry-schema-1.3.2 lib/dry/schema/rule_applier.rb
dry-schema-1.3.1 lib/dry/schema/rule_applier.rb
dry-schema-1.3.0 lib/dry/schema/rule_applier.rb
dry-schema-1.2.0 lib/dry/schema/rule_applier.rb
dry-schema-1.1.0 lib/dry/schema/rule_applier.rb
dry-schema-1.0.3 lib/dry/schema/rule_applier.rb
dry-schema-1.0.2 lib/dry/schema/rule_applier.rb
dry-schema-1.0.1 lib/dry/schema/rule_applier.rb