Class: TRuby::TypeAliasRegistry
- Inherits:
-
Object
- Object
- TRuby::TypeAliasRegistry
- Defined in:
- lib/t_ruby/type_alias_registry.rb
Constant Summary collapse
- BUILT_IN_TYPES =
%w[String Integer Boolean Array Hash Symbol void nil].freeze
Instance Method Summary collapse
- #all ⇒ Object
- #clear ⇒ Object
-
#initialize ⇒ TypeAliasRegistry
constructor
A new instance of TypeAliasRegistry.
- #register(name, definition) ⇒ Object
- #resolve(name) ⇒ Object
- #valid_type?(name) ⇒ Boolean
- #validate_all ⇒ Object
Constructor Details
#initialize ⇒ TypeAliasRegistry
Returns a new instance of TypeAliasRegistry.
12 13 14 |
# File 'lib/t_ruby/type_alias_registry.rb', line 12 def initialize @aliases = {} end |
Instance Method Details
#all ⇒ Object
38 39 40 |
# File 'lib/t_ruby/type_alias_registry.rb', line 38 def all @aliases.dup end |
#clear ⇒ Object
42 43 44 |
# File 'lib/t_ruby/type_alias_registry.rb', line 42 def clear @aliases.clear end |
#register(name, definition) ⇒ Object
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/t_ruby/type_alias_registry.rb', line 16 def register(name, definition) if @aliases.key?(name) raise DuplicateTypeAliasError, "Type alias '#{name}' is already defined" end # Check for self-reference if name == definition raise CircularTypeAliasError, "Type alias '#{name}' cannot reference itself" end # Check for circular references (including longer chains) if would_create_cycle?(name, definition) raise CircularTypeAliasError, "Circular type alias detected involving '#{name}'" end @aliases[name] = definition end |
#resolve(name) ⇒ Object
34 35 36 |
# File 'lib/t_ruby/type_alias_registry.rb', line 34 def resolve(name) @aliases[name] end |
#valid_type?(name) ⇒ Boolean
46 47 48 49 |
# File 'lib/t_ruby/type_alias_registry.rb', line 46 def valid_type?(name) return true if BUILT_IN_TYPES.include?(name) @aliases.key?(name) end |
#validate_all ⇒ Object
51 52 53 54 55 56 |
# File 'lib/t_ruby/type_alias_registry.rb', line 51 def validate_all @aliases.each do |name, definition| check_circular_references(name) check_undefined_types(definition) end end |