Class: TRuby::TypeAliasRegistry

Inherits:
Object
  • Object
show all
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

Constructor Details

#initializeTypeAliasRegistry

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

#allObject



38
39
40
# File 'lib/t_ruby/type_alias_registry.rb', line 38

def all
  @aliases.dup
end

#clearObject



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

Returns:

  • (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_allObject



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