lib/flor/unit/ganger.rb
def task(executor, message)

      domain = message['exid'].split('-', 2).first
      tname = message['tasker']

      tconf =
        ( ! message['routed'] &&
         (@unit.loader.tasker(domain, 'ganger', message) ||
          @unit.loader.tasker(domain, 'tasker', message))) ||
        @unit.loader.tasker(domain, tname, message)

      fail ArgumentError.new(
        "tasker #{tname.inspect} not found"
      ) unless tconf

      if tconf.is_a?(Array)

        points = [ nil, message['point'] ]
        points << 'detask' if points.include?('cancel')

        tconf = tconf.find { |h| points.include?(h['point']) }
      end

      message['tconf'] = tconf unless tconf['include_tconf'] == false

      message['vars'] = gather_vars(executor, tconf, message)

      m = dup_message(message)
        #
        # the tasker gets a copy of the message (and it can play with it
        # to its heart content), meanwhile the message is handed to the
        # "post" notifiers.

      @unit.caller.call(self, tconf, m)
        #
        # might return a re-routing message,
        # especially if it's a domain tasker
    end
def task(executor, message)

      domain = message['exid'].split('-', 2).first
      tname = message['tasker']

      tconf =
        ( ! message['routed'] &&
         (@unit.loader.tasker(domain, 'ganger', message) ||
          @unit.loader.tasker(domain, 'tasker', message))) ||
        @unit.loader.tasker(domain, tname, message)

      fail ArgumentError.new(
        "tasker #{tname.inspect} not found"
      ) unless tconf

      if tconf.is_a?(Array)

        points = [ nil, message['point'] ]
        points << 'detask' if points.include?('cancel')

        tconf = tconf.find { |h| points.include?(h['point']) }
      end

      message['tconf'] = tconf unless tconf['include_tconf'] == false

      message['vars'] = gather_vars(executor, tconf, message)

      m = dup_message(message)
        #
        # the tasker gets a copy of the message (and it can play with it
        # to its heart content), meanwhile the message is handed to the
        # "post" notifiers.

      @unit.caller.call(self, tconf, m)
        #
        # might return a re-routing message,
        # especially if it's a domain tasker
    end
Called by Flor::Scheduler. The ganger then has to hand the task
 (the message) to the proper tasker.