class SmartCore::Initializer::TypeSystem::Interop::Aliasing::AliasList

@api private @since 0.1.0

Attributes

interop_klass[R]

@return [Class<SmartCore::Initializer::TypeSystem::Interop>]

@api private @since 0.1.0

list[R]

@return [Hash<String,Any>]

@api private @since 0.1.0

Public Class Methods

new(interop_klass) click to toggle source

@param interop_klass [Class<SmartCore::Initializer::TypeSystem::Interop>] @return [void]

@api private @since 0.1.0

# File lib/smart_core/initializer/type_system/interop/aliasing/alias_list.rb, line 11
def initialize(interop_klass)
  @interop_klass = interop_klass
  @list = {}
  @lock = SmartCore::Engine::Lock.new
end

Public Instance Methods

associate(alias_name, type) click to toggle source

@param alias_name [String, Symbol] @param type [Any] @return [void]

@api private @since 0.1.0

# File lib/smart_core/initializer/type_system/interop/aliasing/alias_list.rb, line 40
def associate(alias_name, type)
  interop_klass.prevent_incompatible_type!(type)
  thread_safe { set_alias(alias_name, type) }
end
keys() click to toggle source

@return [Array<String>]

@api private @since 0.1.0

# File lib/smart_core/initializer/type_system/interop/aliasing/alias_list.rb, line 21
def keys
  thread_safe { registered_aliases }
end
resolve(alias_name) click to toggle source

@param alias_name [String, Symbol] @return [Any]

@api private @since 0.1.0

# File lib/smart_core/initializer/type_system/interop/aliasing/alias_list.rb, line 50
def resolve(alias_name)
  thread_safe { get_alias(alias_name) }
end
to_h() click to toggle source

@return [Hash<String,Any>]

@api private @since 0.1.0

# File lib/smart_core/initializer/type_system/interop/aliasing/alias_list.rb, line 29
def to_h
  thread_safe { transform_to_hash }
end
Also aliased as: to_hash
to_hash()
Alias for: to_h

Private Instance Methods

get_alias(alias_name) click to toggle source

@param alias_name [String, Symbol] @return [Any]

@api private @since 0.1.0

# File lib/smart_core/initializer/type_system/interop/aliasing/alias_list.rb, line 100
  def get_alias(alias_name)
    alias_name = normalized_alias(alias_name)

    begin
      list.fetch(alias_name)
    rescue ::KeyError
      raise(SmartCore::Initializer::TypeAliasNotFoundError, <<~ERROR_MESSAGE)
        Alias with name "#{alias_name}" not found.
      ERROR_MESSAGE
    end
  end
normalized_alias(alias_name) click to toggle source

@param alias_name [String, Symbol] @return [String]

@api private @since 0.1.0

# File lib/smart_core/initializer/type_system/interop/aliasing/alias_list.rb, line 117
def normalized_alias(alias_name)
  raise(
    SmartCore::Initializer::ArgumentError,
    'Type alias should be a type of string or symbol'
  ) unless alias_name.is_a?(String) || alias_name.is_a?(Symbol)

  alias_name.to_s
end
registered_aliases() click to toggle source

@return [Array<String>]

@api private @since 0.1.0

# File lib/smart_core/initializer/type_system/interop/aliasing/alias_list.rb, line 138
def registered_aliases
  list.keys
end
set_alias(alias_name, type) click to toggle source

@param alias_name [String, Symbol] @param type [Any] @return [void]

@api private @since 0.1.0

# File lib/smart_core/initializer/type_system/interop/aliasing/alias_list.rb, line 83
def set_alias(alias_name, type)
  alias_name = normalized_alias(alias_name)

  if list.key?(alias_name)
    ::Warning.warn(
      "[#{interop_klass.name}] Shadowing of the already existing \"#{alias_name}\" type alias."
    )
  end

  list[alias_name] = type
end
thread_safe(&block) click to toggle source

@param block [Block] @return [Any]

@api private @since 0.1.0

# File lib/smart_core/initializer/type_system/interop/aliasing/alias_list.rb, line 73
def thread_safe(&block)
  @lock.synchronize(&block)
end
transform_to_hash() click to toggle source

@return [Hash<String,Any>]

@api private @since 0.1.0

# File lib/smart_core/initializer/type_system/interop/aliasing/alias_list.rb, line 130
def transform_to_hash
  list.to_h
end