Sha256: e31fb5aba649d82d924c4cbb229e7d659c27a04c4bf4695a80b8d25d43ad17b2

Contents?: true

Size: 938 Bytes

Versions: 6

Compression:

Stored size: 938 Bytes

Contents

# frozen_string_literal: true

require 'dry/logic/predicates'

module Dry
  module Schema
    # A registry with predicate objects from `Dry::Logic::Predicates`
    #
    # @api private
    class PredicateRegistry
      # @api private
      attr_reader :predicates

      # @api private
      attr_reader :has_predicate

      # @api private
      def initialize(predicates = Dry::Logic::Predicates)
        @predicates = predicates
        @has_predicate = ::Kernel.instance_method(:respond_to?).bind(@predicates)
      end

      # @api private
      def [](name)
        predicates[name]
      end

      # @api private
      def key?(name)
        has_predicate.(name)
      end

      # @api private
      def arg_list(name, *values)
        predicate = self[name]

        predicate
          .parameters
          .map(&:last)
          .zip(values + Array.new(predicate.arity - values.size, Undefined))
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
dry-schema-1.3.4 lib/dry/schema/predicate_registry.rb
dry-schema-1.3.3 lib/dry/schema/predicate_registry.rb
dry-schema-1.3.2 lib/dry/schema/predicate_registry.rb
dry-schema-1.3.1 lib/dry/schema/predicate_registry.rb
dry-schema-1.3.0 lib/dry/schema/predicate_registry.rb
dry-schema-1.2.0 lib/dry/schema/predicate_registry.rb