class SmartCore::Container

@api public @since 0.7.0

Constants

ArgumentError

@api public @since 0.7.0

DependencyOverNamespaceOverlapError

@see SmartCore::Container::DependencyCompatability::General @see SmartCore::Container::DependencyCompatability::Definition @see SmartCore::Container::DependencyCompatability::Registry

@api public @since 0.7.0

Error

@api public @since 0.7.0

FetchError

@api public @since 0.8.0

FrozenRegistryError

@see SmartCore::Container::Registry

@api public @since 0.7.0

IncompatibleEntityNameError

@api public @since 0.7.0

NamespaceOverDependencyOverlapError

@see SmartCore::Container::DependencyCompatability::General @see SmartCore::Container::DependencyCompatability::Definition @see SmartCore::Container::DependencyCompatability::Registry

@api public @since 0.7.0

Attributes

registry[R]

@return [SmartCore::Container::Registry]

@api private @since 0.7.0

Public Class Methods

new() click to toggle source

@return [void]

@api public @since 0.7.0

# File lib/smart_core/container.rb, line 30
def initialize
  build_registry!
  @access_lock = ArbitaryLock.new
end

Public Instance Methods

[](dependency_path)
Alias for: resolve
fetch(dependency_path) click to toggle source

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

@api public @since 0.8.0

# File lib/smart_core/container.rb, line 71
def fetch(dependency_path)
  thread_safe { DependencyResolver.fetch(self, dependency_path) }
end
freeze!() click to toggle source

@return [void]

@api public @since 0.7.0

# File lib/smart_core/container.rb, line 79
def freeze!
  thread_safe { registry.freeze! }
end
frozen?() click to toggle source

@return [Boolean]

@api public @since 0.7.0

# File lib/smart_core/container.rb, line 87
def frozen?
  thread_safe { registry.frozen? }
end
hash_tree(resolve_dependencies: false) click to toggle source

@option resolve_dependencies [Boolean] @return [Hash<String|Symbol,SmartCore::Container::Entities::Base|Any>]

@api public @since 0.7.0

# File lib/smart_core/container.rb, line 104
def hash_tree(resolve_dependencies: false)
  thread_safe { registry.hash_tree(resolve_dependencies: resolve_dependencies) }
end
Also aliased as: to_h, to_hash
namespace(namespace_name, &dependencies_definition) click to toggle source

@param namespace_name [String, Symbol] @param dependencies_definition [Block] @return [void]

@api public @since 0.7.0

# File lib/smart_core/container.rb, line 51
def namespace(namespace_name, &dependencies_definition)
  thread_safe { registry.register_namespace(namespace_name, &dependencies_definition) }
end
register(dependency_name, &dependency_definition) click to toggle source

@param dependency_name [String, Symbol] @param dependency_definition [Block] @return [void]

@api public @sicne 0.7.0

# File lib/smart_core/container.rb, line 41
def register(dependency_name, &dependency_definition)
  thread_safe { registry.register_dependency(dependency_name, &dependency_definition) }
end
reload!() click to toggle source

@return [void]

@api public @since 0.7.0

# File lib/smart_core/container.rb, line 95
def reload!
  thread_safe { build_registry! }
end
resolve(dependency_path) click to toggle source

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

@api public @since 0.7.0 @version 0.8.0

# File lib/smart_core/container.rb, line 61
def resolve(dependency_path)
  thread_safe { DependencyResolver.resolve(self, dependency_path) }
end
Also aliased as: []
to_h(resolve_dependencies: false)
Alias for: hash_tree
to_hash(resolve_dependencies: false)
Alias for: hash_tree

Private Instance Methods

build_registry!() click to toggle source

@return [void]

@api private @since 0.7.0

# File lib/smart_core/container.rb, line 116
def build_registry!
  @registry = RegistryBuilder.build(self)
end
thread_safe(&block) click to toggle source

@param block [Block] @return [Any]

@api private @since 0.7.0

# File lib/smart_core/container.rb, line 125
def thread_safe(&block)
  @access_lock.thread_safe(&block)
end