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