Bug:Fix file validation issue
[vnfsdk/refrepo.git] / vnfmarket / src / main / webapp / vnfmarket / node_modules / karma / lib / events.js
1 var events = require('events')
2 var util = require('util')
3 var Q = require('q')
4
5 var helper = require('./helper')
6
7 var bindAllEvents = function (object, context) {
8   context = context || this
9
10   var bindMethod = function (method) {
11     context.on(helper.camelToSnake(method.substr(2)), function () {
12       var args = Array.prototype.slice.call(arguments, 0)
13       args.push(context)
14       object[method].apply(object, args)
15     })
16   }
17
18   for (var method in object) {
19     if (helper.isFunction(object[method]) && method.substr(0, 2) === 'on') {
20       bindMethod(method)
21     }
22   }
23 }
24
25 var bufferEvents = function (emitter, eventsToBuffer) {
26   var listeners = []
27   var eventsToReply = []
28   var genericListener = function () {
29     eventsToReply.push(Array.prototype.slice.call(arguments))
30   }
31
32   eventsToBuffer.forEach(function (eventName) {
33     var listener = genericListener.bind(null, eventName)
34     listeners.push(listener)
35     emitter.on(eventName, listener)
36   })
37
38   return function () {
39     if (!eventsToReply) {
40       return
41     }
42
43     // remove all buffering listeners
44     listeners.forEach(function (listener, i) {
45       emitter.removeListener(eventsToBuffer[i], listener)
46     })
47
48     // reply
49     eventsToReply.forEach(function (args) {
50       events.EventEmitter.prototype.emit.apply(emitter, args)
51     })
52
53     // free-up
54     listeners = eventsToReply = null
55   }
56 }
57
58 // TODO(vojta): log.debug all events
59 var EventEmitter = function () {
60   this.bind = bindAllEvents
61
62   this.emitAsync = function (name) {
63     // TODO(vojta): allow passing args
64     // TODO(vojta): ignore/throw if listener call done() multiple times
65     var pending = this.listeners(name).length
66     var deferred = Q.defer()
67     var done = function () {
68       if (!--pending) {
69         deferred.resolve()
70       }
71     }
72
73     this.emit(name, done)
74
75     if (!pending) {
76       deferred.resolve()
77     }
78
79     return deferred.promise
80   }
81 }
82
83 util.inherits(EventEmitter, events.EventEmitter)
84
85 // PUBLISH
86 exports.EventEmitter = EventEmitter
87 exports.bindAll = bindAllEvents
88 exports.bufferEvents = bufferEvents