docs: function sendEvent(obj, eventName, params, actions) {
      if (!actions) {
        var meta = _emberMetalMeta.peekMeta(obj);
        actions = meta && meta.matchingListeners(eventName);
      }
  
      if (!actions || actions.length === 0) {
        return;
      }
  
      for (var i = actions.length - 3; i >= 0; i -= 3) {
        // looping in reverse for once listeners
        var target = actions[i];
        var method = actions[i + 1];
        var flags = actions[i + 2];
  
        if (!method) {
          continue;
        }
        if (flags & _emberMetalMeta_listeners.SUSPENDED) {
          continue;
        }
        if (flags & _emberMetalMeta_listeners.ONCE) {
          removeListener(obj, eventName, target, method);
        }
        if (!target) {
          target = obj;
        }
        if ('string' === typeof method) {
          if (params) {
            _emberMetalUtils.applyStr(target, method, params);
          } else {
            target[method]();
          }
        } else {
          if (params) {
            _emberMetalUtils.apply(target, method, params);
          } else {
            method.call(target);
          }
        }
      }
      return true;
    }