class Hypo::Component

Attributes

container[R]
lifetime[R]
name[R]
type[R]

Public Class Methods

new(type, container, name = nil) click to toggle source
# File lib/hypo/component.rb, line 12
def initialize(type, container, name = nil)
  @container = container
  @type = type
  @name = name || type.name.gsub(/(.)([A-Z](?=[a-z]))/, '\1_\2').delete('::').downcase.to_sym
  @lifetime = container.lifetimes[:transient]
  @dependency_names = @type.instance_method(:initialize).parameters
                        .map{|p| p[1]}
                        .select{|name| ![:attrs, :attributes].include?(name)}
end

Public Instance Methods

dependencies() click to toggle source
# File lib/hypo/component.rb, line 32
def dependencies
  @dependency_names.map { |dependency| @container.resolve(dependency) }
end
instance(attrs = {}) click to toggle source
# File lib/hypo/component.rb, line 22
def instance(attrs = {})
  instance = @lifetime.instance(self, attrs)

  @dependency_names.each do |dependency|
    instance.instance_variable_set "@#{dependency}".to_sym, @container.resolve(dependency)
  end

  instance
end