class SmartIoC::BeanDefinitionsStorage
Public Class Methods
new()
click to toggle source
# File lib/smart_ioc/bean_definitions_storage.rb, line 4 def initialize @collection = [] end
Public Instance Methods
clear_dependencies()
click to toggle source
# File lib/smart_ioc/bean_definitions_storage.rb, line 8 def clear_dependencies @collection.each do |bd| bd.dependencies.each do |dependency| dependency.bean_definition = nil end end end
delete_by_class(klass)
click to toggle source
# File lib/smart_ioc/bean_definitions_storage.rb, line 40 def delete_by_class(klass) klass_str = klass.to_s bean = @collection.detect {|bd| bd.klass.to_s == klass_str} if bean @collection.delete(bean) end end
filter_by(bean_name, package = nil, context = nil)
click to toggle source
# File lib/smart_ioc/bean_definitions_storage.rb, line 64 def filter_by(bean_name, package = nil, context = nil) bean_definitions = @collection.select do |bd| bd.name == bean_name end if package bean_definitions = bean_definitions.select do |bd| bd.package == package end end if context bean_definitions = bean_definitions.select do |bd| bd.context == context end end bean_definitions end
filter_by_with_drop_to_default_context(bean_name, package = nil, context = nil)
click to toggle source
@bean_name [Symbol] bean name @package [Symbol, nil] package name @context [Symbol, nil] context
# File lib/smart_ioc/bean_definitions_storage.rb, line 114 def filter_by_with_drop_to_default_context(bean_name, package = nil, context = nil) bean_definitions = @collection.select do |bd| bd.name == bean_name end if package bean_definitions = bean_definitions.select do |bd| bd.package == package end end if context context_bean_definitions = bean_definitions.select do |bd| bd.context == context end if !context_bean_definitions.empty? bean_definitions = context_bean_definitions end end bean_definitions end
find(bean_name, package = nil, context = nil, parent_package = nil)
click to toggle source
@bean_name [Symbol] bean name @package [Symbol, nil] package name @context [Symbol, nil] context @package [Symbol, nil] parent_package name of parent package @raises AmbiguousBeanDefinition if multiple bean definitions are found
# File lib/smart_ioc/bean_definitions_storage.rb, line 89 def find(bean_name, package = nil, context = nil, parent_package = nil) bds = filter_by_with_drop_to_default_context(bean_name, package, context) if bds.size > 1 && parent_package bean_definition = bds.detect do |bd| bd.package == parent_package end if bean_definition bds = [bean_definition] end end if bds.size > 1 raise AmbiguousBeanDefinition.new(bean_name, bds) elsif bds.size == 0 raise BeanNotFound.new(bean_name) end bds.first end
find_bean(bean_name, package, context)
click to toggle source
Returns bean definition for specific class @param bean_name [Symbol] @param package [Symbol] @param context [Symbol] @return bean definition [BeanDefinition] or nil
# File lib/smart_ioc/bean_definitions_storage.rb, line 60 def find_bean(bean_name, package, context) @collection.detect {|bd| bd.name == bean_name && bd.package == package && bd.context == context} end
find_by_class(klass)
click to toggle source
@param klass [Class] bean class @return bean definition [BeanDefinition] or nil
# File lib/smart_ioc/bean_definitions_storage.rb, line 51 def find_by_class(klass) @collection.detect {|bd| bd.klass == klass} end
push(bean_definition)
click to toggle source
@param bean_definition [BeanDefinition]
# File lib/smart_ioc/bean_definitions_storage.rb, line 17 def push(bean_definition) existing_bd = @collection.detect do |bd| bd == bean_definition end if existing_bd @collection.reject! { |bd| bd == existing_bd } message = <<~EOF \nReplacing bean definition... - New bean details: #{bean_definition.inspect} - Existing bean details: #{existing_bd.inspect}) EOF puts message end @collection.push(bean_definition) end