class SmartCore::Initializer::TypeSystem::Interop::Aliasing::AliasList
@api private @since 0.1.0
Attributes
@return [Class<SmartCore::Initializer::TypeSystem::Interop>]
@api private @since 0.1.0
@return [Hash<String,Any>]
@api private @since 0.1.0
Public Class Methods
@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
@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
@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
@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
@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
Private Instance Methods
@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
@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
@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
@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
@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
@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