class Realm::Container

Public Class Methods

[](object) click to toggle source
# File lib/realm/container.rb, line 10
def self.[](object)
  object.is_a?(Container) ? object : Container.new(object)
end
new(hash = {}) click to toggle source
# File lib/realm/container.rb, line 14
def initialize(hash = {})
  register_all(hash)
end

Public Instance Methods

[](key) click to toggle source
# File lib/realm/container.rb, line 43
def [](key)
  resolve(key) if key?(key)
end
create(klass, *args, **kwargs) click to toggle source
# File lib/realm/container.rb, line 35
def create(klass, *args, **kwargs)
  (klass.try(:dependencies) || []).each do |d|
    fn = -> { resolve_dependable(sanitize_dependable(d.dependable), d.optional?) }
    kwargs[d.name] = d.lazy? ? fn : fn.call
  end
  klass.new(*args, **kwargs)
end
register(key, contents = nil, options = {}, &block) click to toggle source
Calls superclass method
# File lib/realm/container.rb, line 18
def register(key, contents = nil, options = {}, &block)
  options[:klass] ||= contents.class if contents && !contents.is_a?(::Hash)
  super(key, contents, options, &block)
end
register_all(hash) click to toggle source
# File lib/realm/container.rb, line 23
def register_all(hash)
  hash.each_pair do |key, value|
    register(key, value)
  end
end
register_factory(klass, *args, as: nil, memoize: true, **kwargs) click to toggle source
# File lib/realm/container.rb, line 29
def register_factory(klass, *args, as: nil, memoize: true, **kwargs) # rubocop:disable Naming/MethodParameterName
  register(as || klass, klass: klass, memoize: memoize) do
    create(klass, *args, **kwargs)
  end
end
resolve_all(klass) click to toggle source
# File lib/realm/container.rb, line 47
def resolve_all(klass)
  _container.each_with_object([]) do |(_, item), all|
    all << item.call if item.options[:klass] <= klass
  end
end

Private Instance Methods

resolve_dependable(dependable, optional) click to toggle source
# File lib/realm/container.rb, line 59
def resolve_dependable(dependable, optional)
  raise DependencyMissing, dependable unless optional || key?(dependable)

  self[dependable]
end
sanitize_dependable(dependable) click to toggle source
# File lib/realm/container.rb, line 55
def sanitize_dependable(dependable)
  dependable.is_a?(String) && dependable.match(/^[A-Z]/) ? dependable.constantize : dependable
end