diff --git a/package.json b/package.json index 3e7d549..cf16c21 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,6 @@ "sinon": "~1.17.3" }, "dependencies": { - "elasticsearch": "~11.0.1", - "joi": "~8.0.5" + "elasticsearch": "~11.0.1" } } diff --git a/src/helpers/create_client.js b/src/helpers/create_client.js new file mode 100644 index 0000000..c63fced --- /dev/null +++ b/src/helpers/create_client.js @@ -0,0 +1,13 @@ +import elasticsearch from 'elasticsearch'; + +export default function createClient(options) { + let client; + + if (options instanceof elasticsearch.Client) { + client = options; + } else { + client = new elasticsearch.Client(options); + } + + return client; +}; diff --git a/src/helpers/validate_schema.js b/src/helpers/validate_schema.js deleted file mode 100644 index 9a76ed1..0000000 --- a/src/helpers/validate_schema.js +++ /dev/null @@ -1,17 +0,0 @@ -import Joi from 'joi'; - -var schema = Joi.object({ - url: Joi.string().uri({ scheme: ['http', 'https'] }).default('http://localhost:9200'), - index: Joi.string().required(), - interval: Joi.string().default('1w'), - timeout: Joi.number().min(10000).default(10000), -}).default(); - -const validateSchema = (options) => new Promise(function (resolve, reject) { - schema.validate(options, (err, settings) => { - if (err) return reject(err); - resolve(settings); - }) -}) - -export default validateSchema; \ No newline at end of file diff --git a/src/index.js b/src/index.js index a92c1a9..cd04c0b 100644 --- a/src/index.js +++ b/src/index.js @@ -1,24 +1,26 @@ import events from 'events'; -import validateSchema from './helpers/validate_schema'; +import createClient from './helpers/create_client'; export default class Elastique extends events.EventEmitter { constructor(options = {}) { + if (!options.index) throw new Error('Must specify an index to write to'); super(); this.ready = true; - // initalize the module - Promise.all([ - validateSchema(options) - ]) - .then(([ settings ]) => { - this.settings = settings; - }) - .catch((err) => { - this.ready = false; - this.emit('error', err); - throw err; + this.settings = {}; + Object.keys(options, (key) => { + if (key !== 'client') this.settings[key] = options[key]; }); + + this.client = createClient(options.client); + } + + add(type, payload, opts = {}) { + const options = Object.assign({ + timeout: this.settings.timeout + }, opts); + } } diff --git a/test/index.js b/test/index.js index d8068f7..a801422 100644 --- a/test/index.js +++ b/test/index.js @@ -1,28 +1,29 @@ -import Elastique from '../lib/index' +import Elastique from '../lib/index'; import expect from 'expect.js'; describe('Elastique class', function () { describe('Option validation', function () { - it('should emit error without an index', function (done) { - const queue = new Elastique(); - - queue.on('error', (err) => { - expect(err).to.be.an(Error); - expect(err.message).to.match(/index/); - done(); - }); + it('should throw without an index', function () { + const init = () => new Elastique(); + expect(init).to.throwException(/must.+specify.+index/i); }); - it('should emit error with an invalid URL', function (done) { - const queue = new Elastique({ + it('should throw with an invalid host', function () { + const init = () => new Elastique({ index: 'elastique', - url: 'nope://nope' + client: { host: 'nope://nope' } }); - queue.on('error', (err) => { - expect(err).to.be.an(Error); - expect(err.message).to.match(/url/); - done(); + + expect(init).to.throwException(/invalid.+protocol/i); + }); + + it('should throw with invalid hosts', function () { + const init = () => new Elastique({ + index: 'elastique', + client: { hosts: [{ host: 'localhost', protocol: 'nope' }] } }); + + expect(init).to.throwException(/invalid.+protocol/i); }); }); }); \ No newline at end of file