Class: EasyTalk::Builders::Registry
- Inherits:
-
Object
- Object
- EasyTalk::Builders::Registry
- Extended by:
- T::Sig
- Defined in:
- lib/easy_talk/builders/registry.rb
Overview
Registry for type-to-builder mappings.
The registry allows custom types to be registered with their corresponding schema builder classes at runtime, without modifying the gem's source code.
Custom registrations take priority over built-in types, allowing users to override default behavior when needed.
Class Method Summary collapse
- .register(type_key, builder_class, collection: false) ⇒ Object
- .register_built_in_types ⇒ Object
- .registered?(type_key) ⇒ Boolean
- .registered_types ⇒ Object
- .registry ⇒ Object
- .reset! ⇒ Object
- .resolve(type) ⇒ Object
- .unregister(type_key) ⇒ Object
Class Method Details
.register(type_key, builder_class, collection: false) ⇒ Object
51 52 53 54 55 56 |
# File 'lib/easy_talk/builders/registry.rb', line 51 def register(type_key, builder_class, collection: false) raise ArgumentError, 'Builder must respond to .new' unless builder_class.respond_to?(:new) key = normalize_key(type_key) registry[key] = { builder: builder_class, collection: collection } end |
.register_built_in_types ⇒ Object
119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 |
# File 'lib/easy_talk/builders/registry.rb', line 119 def register_built_in_types register(String, Builders::StringBuilder) register(Integer, Builders::IntegerBuilder) register(Float, Builders::NumberBuilder) register(BigDecimal, Builders::NumberBuilder) register('T::Boolean', Builders::BooleanBuilder) register(TrueClass, Builders::BooleanBuilder) register(NilClass, Builders::NullBuilder) register(Date, Builders::TemporalBuilder::DateBuilder) register(DateTime, Builders::TemporalBuilder::DatetimeBuilder) register(Time, Builders::TemporalBuilder::TimeBuilder) register('allOf', Builders::CompositionBuilder::AllOfBuilder, collection: true) register('anyOf', Builders::CompositionBuilder::AnyOfBuilder, collection: true) register('oneOf', Builders::CompositionBuilder::OneOfBuilder, collection: true) register('EasyTalk::Types::Tuple', Builders::TupleBuilder, collection: true) register('T::Types::TypedArray', Builders::TypedArrayBuilder, collection: true) register('T::Types::Union', Builders::UnionBuilder, collection: true) end |
.registered?(type_key) ⇒ Boolean
84 85 86 |
# File 'lib/easy_talk/builders/registry.rb', line 84 def registered?(type_key) registry.key?(normalize_key(type_key)) end |
.registered_types ⇒ Object
101 102 103 |
# File 'lib/easy_talk/builders/registry.rb', line 101 def registered_types registry.keys end |
.registry ⇒ Object
32 33 34 |
# File 'lib/easy_talk/builders/registry.rb', line 32 def registry @registry ||= {} end |
.reset! ⇒ Object
109 110 111 112 |
# File 'lib/easy_talk/builders/registry.rb', line 109 def reset! @registry = nil register_built_in_types end |
.resolve(type) ⇒ Object
72 73 74 75 76 77 |
# File 'lib/easy_talk/builders/registry.rb', line 72 def resolve(type) entry = find_registration(type) return nil unless entry [entry[:builder], entry[:collection]] end |
.unregister(type_key) ⇒ Object
93 94 95 |
# File 'lib/easy_talk/builders/registry.rb', line 93 def unregister(type_key) registry.delete(normalize_key(type_key)) end |