Sha256: e92a50413b5fbc7ee4b3430914ff247ebed1d4cc6f69e66b3d7a7c165846a9fc

Contents?: true

Size: 1.06 KB

Versions: 3

Compression:

Stored size: 1.06 KB

Contents

# typed: strict

require "singleton"

module Typed
  module Coercion
    class CoercerRegistry
      extend T::Sig

      include Singleton

      Registry = T.type_alias { T::Array[T.class_of(Coercer)] }

      DEFAULT_COERCERS = T.let(
        [
          StringCoercer,
          SymbolCoercer,
          BooleanCoercer,
          IntegerCoercer,
          FloatCoercer,
          DateCoercer,
          EnumCoercer,
          StructCoercer,
          TypedArrayCoercer,
          TypedHashCoercer
        ],
        Registry
      )

      sig { void }
      def initialize
        @available = T.let(DEFAULT_COERCERS.clone, Registry)
      end

      sig { params(coercer: T.class_of(Coercer)).void }
      def register(coercer)
        @available.prepend(coercer)
      end

      sig { void }
      def reset!
        @available = DEFAULT_COERCERS.clone
      end

      sig { params(type: T::Types::Base).returns(T.nilable(T.class_of(Coercer))) }
      def select_coercer_by(type:)
        @available.find { |coercer| coercer.new.used_for_type?(type) }
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
sorbet-schema-0.7.1 lib/typed/coercion/coercer_registry.rb
sorbet-schema-0.7.0 lib/typed/coercion/coercer_registry.rb
sorbet-schema-0.6.0 lib/typed/coercion/coercer_registry.rb