Class: Seasar::Container::Assembler::ManualConstructorAssembler

Inherits:
AbstractAssembler show all
Defined in:
lib/seasar/container/assembler/manual-constructor-assembler.rb

Overview

コンストラクタをマニュアルインジェクションで構築するアセンブラです。

Instance Method Summary collapse

Methods inherited from AbstractAssembler

#get_argument

Constructor Details

#initialize(component_def) ⇒ ManualConstructorAssembler

ManualConstructorAssemblerを構築します。

  • args

    1. Seasar::Container::ComponentDef component_def



29
30
31
# File 'lib/seasar/container/assembler/manual-constructor-assembler.rb', line 29

def initialize(component_def)
  super
end

Instance Method Details

#assembleObject

コンストラクタをマニュアルインジェクションで構築します。

  • args

    • none

  • return

    • none



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/seasar/container/assembler/manual-constructor-assembler.rb', line 38

def assemble
  args = []
  for arg_def in @component_def.get_arg_defs
    args << arg_def.value
  end

  procedure = nil
  if @component_def.onetime_proc.is_a?(Proc)
    procedure = @component_def.onetime_proc
    @component_def.onetime_proc = nil
  elsif @component_def.procedure.is_a?(Proc)
    procedure = @component_def.procedure
  end
  if procedure.nil?
    return @component_def.get_concreate_class.new(*args)
  elsif @component_def.component_class == Proc
    return procedure
  else
    component = procedure.call(*args)
    if component.is_a?(@component_def.component_class)
      return component
    else
      raise TypeError.new("invalid instance found. #{@component_def.component_class.name} is expected, but was #{component.class.name}")
    end
  end
end