class Dumpling::ServiceBuilder

Public Class Methods

new(services, abstract_services) click to toggle source
# File lib/dumpling/service_builder.rb, line 3
def initialize(services, abstract_services)
  @services = services
  @abstract_services = abstract_services
end

Public Instance Methods

build(specification) click to toggle source
# File lib/dumpling/service_builder.rb, line 8
def build(specification)
  instance = service_instance(specification)
  dependencies = service_dependencies(specification)
  dependencies.each do |service_id, options|
    service_specification = @services.get(service_id)
    instance.send("#{options[:attribute]}=", build(service_specification))
  end
  instance
end

Private Instance Methods

service_dependencies(specification) click to toggle source
# File lib/dumpling/service_builder.rb, line 24
def service_dependencies(specification)
  dependencies = {}

  specification.abstract_services.each do |abstract_service_id|
    abstract_service_specification = @abstract_services.get(abstract_service_id)
    abstract_service_dependencies = service_dependencies(abstract_service_specification)
    dependencies.merge!(abstract_service_dependencies)
  end

  dependencies.merge!(specification.dependencies)
  dependencies
end
service_instance(specification) click to toggle source
# File lib/dumpling/service_builder.rb, line 20
def service_instance(specification)
  specification.class.nil? ? specification.instance : specification.class.new
end