Class: Crabfarm::Factories::Decorable::DecoratorChain

Inherits:
Object
  • Object
show all
Defined in:
lib/crabfarm/factories/decorable.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(_base, _decorator) ⇒ DecoratorChain

Returns a new instance of DecoratorChain.



9
10
11
12
# File 'lib/crabfarm/factories/decorable.rb', line 9

def initialize(_base, _decorator)
  @base = _base # al
  @decorator = _decorator
end

Instance Attribute Details

#baseObject (readonly)

Returns the value of attribute base.



7
8
9
# File 'lib/crabfarm/factories/decorable.rb', line 7

def base
  @base
end

#decoratorObject (readonly)

Returns the value of attribute decorator.



7
8
9
# File 'lib/crabfarm/factories/decorable.rb', line 7

def decorator
  @decorator
end

Instance Method Details

#decorate(_obj) ⇒ Object



25
26
27
28
29
30
31
32
33
# File 'lib/crabfarm/factories/decorable.rb', line 25

def decorate(_obj)
  if @decorator.respond_to? :decorate
    new_obj = @decorator.decorate _obj
    _obj = new_obj if new_obj
  end

  return _obj if @base.nil?
  @base.decorate _obj
end

#prepare(_args) ⇒ Object



14
15
16
17
18
19
20
21
22
23
# File 'lib/crabfarm/factories/decorable.rb', line 14

def prepare(_args)
  obj = if @decorator.respond_to? :prepare
    @decorator.prepare(*_args)
  else nil end

  return obj if @base.nil?
  base_obj = @base.prepare _args
  raise ConfigurationError.new 'Decorator race condition' if obj and base_obj
  obj || base_obj
end