class Dynflow::Middleware::World

Public Class Methods

new() click to toggle source
# File lib/dynflow/middleware/world.rb, line 6
def initialize
  @register = Middleware::Register.new
  clear_cache!
end

Public Instance Methods

clear_cache!() click to toggle source
# File lib/dynflow/middleware/world.rb, line 33
def clear_cache!
  @middleware_classes_cache = {}
end
execute(method, action_or_class, *args, &block) click to toggle source
# File lib/dynflow/middleware/world.rb, line 16
def execute(method, action_or_class, *args, &block)
  Match! method, :delay, :plan, :run, :finalize, :plan_phase, :finalize_phase
  if Child? action_or_class, Dynflow::Action
    action = nil
    action_class = action_or_class
  elsif Type? action_or_class, Dynflow::Action
    action = action_or_class
    action_class = action.class
  else
    Algebrick::TypeCheck.error action_or_class, 'is not instance or child class', Dynflow::Action
  end

  classes = middleware_classes(action_class)
  stack   = Middleware::Stack.build(classes, method, action, &block)
  stack.call(*args)
end
use(*args) click to toggle source
# File lib/dynflow/middleware/world.rb, line 11
def use(*args)
  clear_cache!
  @register.use(*args)
end

Private Instance Methods

cumulate_register(action_class, register = Middleware::Register.new) click to toggle source
# File lib/dynflow/middleware/world.rb, line 39
def cumulate_register(action_class, register = Middleware::Register.new)
  register.merge!(@register)
  unless action_class == Dynflow::Action
    cumulate_register(action_class.superclass, register)
  end
  register.merge!(action_class.middleware)
  return register
end
middleware_classes(action_class) click to toggle source
# File lib/dynflow/middleware/world.rb, line 48
def middleware_classes(action_class)
  unless @middleware_classes_cache.key?(action_class)
    register = cumulate_register(action_class)
    resolver = Dynflow::Middleware::Resolver.new(register)
    @middleware_classes_cache[action_class] = resolver.result
  end
  return @middleware_classes_cache[action_class]
end