Class: ActionHandler::Installer

Inherits:
Object
  • Object
show all
Defined in:
lib/action_handler/installer.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(args_maker: ActionHandler::ArgsMaker.new, res_evaluator: ActionHandler::ResponseEvaluator.new) ⇒ Installer

Returns a new instance of Installer.



16
17
18
19
20
21
22
# File 'lib/action_handler/installer.rb', line 16

def initialize(
  args_maker: ActionHandler::ArgsMaker.new,
  res_evaluator: ActionHandler::ResponseEvaluator.new
)
  @args_maker = args_maker
  @res_evaluator = res_evaluator
end

Instance Attribute Details

#args_makerObject (readonly)

Returns the value of attribute args_maker.



13
14
15
# File 'lib/action_handler/installer.rb', line 13

def args_maker
  @args_maker
end

#res_evaluatorObject (readonly)

Returns the value of attribute res_evaluator.



14
15
16
# File 'lib/action_handler/installer.rb', line 14

def res_evaluator
  @res_evaluator
end

Instance Method Details

#install(ctrl_class, &block) ⇒ Object



24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/action_handler/installer.rb', line 24

def install(ctrl_class, &block)
  ctrl_class.instance_variable_set(:@_action_handler_factory, block)

  installer = self
  initializer = Module.new.tap do |m|
    m.send(:define_method, :initialize) do |*args|
      factory = self.class.instance_variable_get(:@_action_handler_factory)
      handler = factory.call
      config = ActionHandler::Config.get(handler.class)
      self.class.class_eval(&config.as_controller) if config&.as_controller
      installer.send(:setup, self, handler)

      super(*args)
    end
  end

  ctrl_class.prepend initializer
end