Skip to content

Commit

Permalink
Add event listener using query object
Browse files Browse the repository at this point in the history
  • Loading branch information
radmen committed May 18, 2020
1 parent e4a2dee commit 33097f9
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 0 deletions.
20 changes: 20 additions & 0 deletions src/query-builder.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ const {
/** @typedef { import('./model') } Model */
/** @typedef { import('./events/pipeline') } EventsPipeline */
/** @typedef { import('./events/event') } Event */
/** @typedef { import('./events/pipeline').EventListener } EventListener */

/**
* @callback Scope
Expand Down Expand Up @@ -206,6 +207,25 @@ class QueryBuilder extends BaseQueryBuilder {
return new FetchingEvent()
}
}

/**
* @param {String} eventName
* @param {EventListener|Function} listener
* @param {Object} [options]
* @param {Boolean} [options.native=false]
* @return {QueryBuilder}
*/
on (eventName, listener, options = {}) {
const { native = false } = options

if (native) {
return BaseQueryBuilder.prototype.on.call(this, eventName, listener)
}

this.events.on(eventName, listener)

return this
}
}

/**
Expand Down
23 changes: 23 additions & 0 deletions tests/queries.test.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
const test = require('ava')
const sinon = require('sinon')
const setupDb = require('./setup-db')
const { equalQueries } = require('./assertions')
const { createKex } = require('./utils')
Expand Down Expand Up @@ -36,3 +37,25 @@ test('forbid using table()', t => {
.table('foo')
})
})

test('events | add listener', async t => {
const User = createKex(t).createModel('User')

const listener = sinon.stub()

await User.query()
.on('fetching', listener)

t.true(listener.calledOnce)
})

test('events | add knex native listener', async t => {
const User = createKex(t).createModel('User')

const listener = sinon.stub()

await User.query()
.on('query', listener, { native: true })

t.true(listener.calledOnce)
})

0 comments on commit 33097f9

Please sign in to comment.