Class: Spank::Component

Inherits:
Object
  • Object
show all
Includes:
LambdaBehaviours
Defined in:
lib/spank/component.rb

Instance Method Summary collapse

Methods included from LambdaBehaviours

#memoize

Constructor Details

#initialize(class_key, &block) ⇒ Component

Returns a new instance of Component.



5
6
7
8
# File 'lib/spank/component.rb', line 5

def initialize(class_key, &block)
  @factory_method = block
  @interceptors = []
end

Instance Method Details

#as_singletonObject



18
19
20
# File 'lib/spank/component.rb', line 18

def as_singleton
  @factory_method = memoize(@factory_method)
end

#create(container) ⇒ Object



10
11
12
13
14
15
16
# File 'lib/spank/component.rb', line 10

def create(container)
  instance = @factory_method.call(container)
  @interceptors.each do |interceptor|
    instance = interceptor.intercept(instance)
  end
  instance
end

#intercept(method) ⇒ Object



22
23
24
25
26
# File 'lib/spank/component.rb', line 22

def intercept(method)
  interceptor = InterceptorRegistration.new(method)
  @interceptors.push(interceptor)
  interceptor
end