class Synapse::Configuration::DefinitionBuilder
DSL for building service definitions
Attributes
@return [Symbol]
Public Class Methods
@yield [DefinitionBuilder] @param [Container] container @param [Symbol] id @param [Proc] block @return [undefined]
# File lib/synapse/configuration/definition_builder.rb, line 13 def self.build(container, id = nil, &block) builder = new container, id builder.instance_exec &block if block builder.register_definition builder.id end
@param [Container] container @param [Symbol] id @return [undefined]
# File lib/synapse/configuration/definition_builder.rb, line 24 def initialize(container, id = nil) @container = container @prototype = false @tags = Set.new populate_defaults @id = id.to_sym if id end
Public Instance Methods
@api public @return [undefined]
# File lib/synapse/configuration/definition_builder.rb, line 43 def anonymous identified_by SecureRandom.hex 8 end
@api public @return [undefined]
# File lib/synapse/configuration/definition_builder.rb, line 70 def as_prototype @prototype = true end
@api public @return [undefined]
# File lib/synapse/configuration/definition_builder.rb, line 76 def as_singleton @prototype = false end
Convenience method for building composite services
The given block will be executed in the context of the definition builder
@api public @param [Class] builder_type Defaults to DefinitionBuilder
@param [Proc] block @return [Symbol] The identifier of the newly created service
# File lib/synapse/configuration/definition_builder.rb, line 104 def build_composite(builder_type = DefinitionBuilder, &block) builder_type.build @container, &block end
@return [Definition]
# File lib/synapse/configuration/definition_builder.rb, line 109 def build_definition Definition.new @tags, @prototype, @factory, @instance end
@api public @param [Symbol] id @return [undefined]
# File lib/synapse/configuration/definition_builder.rb, line 37 def identified_by(id) @id = id.to_sym end
@return [undefined]
# File lib/synapse/configuration/definition_builder.rb, line 114 def register_definition unless @id raise ConfigurationError, 'No identifier set for the definition' end @container.register @id, build_definition end
@api public @param [Symbol…] tags @return [undefined]
# File lib/synapse/configuration/definition_builder.rb, line 64 def tag(*tags) @tags.merge tags.flatten end
@api public @param [Proc] factory @return [undefined]
# File lib/synapse/configuration/definition_builder.rb, line 83 def use_factory(&factory) @factory = proc do instance_exec(&factory) end end
@api public @param [Object] instance @return [undefined]
# File lib/synapse/configuration/definition_builder.rb, line 92 def use_instance(instance) @instance = instance end
Protected Instance Methods
Injects any configured dependencies into the given object
@api public @param [Dependent] object @return [Dependent]
# File lib/synapse/configuration/definition_builder.rb, line 133 def inject_into(object) @container.inject_into object object end
Sets the default values for the definition being built @return [undefined]
# File lib/synapse/configuration/definition_builder.rb, line 126 def populate_defaults; end
If the given value is a symbol, it will be resolved using the container. Otherwise, it will be passed through
@api public @raise [ConfigurationError] If value is required but was not set @param [Object] value @return [Object]
# File lib/synapse/configuration/definition_builder.rb, line 145 def resolve(value, optional = false) if value.is_a? Symbol @container.resolve value, optional elsif value.nil? and not optional raise ConfigurationError, 'Value was not set' else value end end
Resolves all services that have the given tag
@api public @param [Symbol] tag @return [Array]
# File lib/synapse/configuration/definition_builder.rb, line 160 def resolve_tagged(tag) @container.resolve_tagged tag end
Resolves any services with the given tag and yields them
@api public @yield [Object] @param [Symbol] tag @return [undefined]
# File lib/synapse/configuration/definition_builder.rb, line 170 def with_tagged(tag, &block) tagged = resolve_tagged tag tagged.each &block end