Sha256: 0354adfddb475f652b04dd01917f4fcd9b096ea4b769e29d04171cf6146d7077

Contents?: true

Size: 1.06 KB

Versions: 2

Compression:

Stored size: 1.06 KB

Contents

# frozen_string_literal: true

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

      # @api private
      attr_reader :has_predicate

      KERNEL_RESPOND_TO = ::Kernel.instance_method(:respond_to?)
      private_constant(:KERNEL_RESPOND_TO)

      if ::UnboundMethod.method_defined?(:bind_call)
        # @api private
        def initialize(predicates = Logic::Predicates)
          @predicates = predicates
        end

        # @api private
        def key?(name)
          KERNEL_RESPOND_TO.bind_call(@predicates, name)
        end
      else
        # @api private
        def initialize(predicates = Logic::Predicates)
          @predicates = predicates
          @has_predicate = KERNEL_RESPOND_TO.bind(@predicates)
        end

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

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

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
dry-types-1.6.1 lib/dry/types/predicate_registry.rb
dry-types-1.6.0 lib/dry/types/predicate_registry.rb