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