[#61,backend/elasticsearch][m]: create, update and delete support in elasticsearch backend -- fixes #61.
This commit is contained in:
parent
d19337eda4
commit
1bf64c5f94
@ -21,7 +21,7 @@ this.recline.Backend = this.recline.Backend || {};
|
||||
// <pre>http://localhost:9200/twitter/tweet</pre>
|
||||
my.ElasticSearch = my.Base.extend({
|
||||
__type__: 'elasticsearch',
|
||||
readonly: true,
|
||||
readonly: false,
|
||||
_getESUrl: function(dataset) {
|
||||
var out = dataset.get('elasticsearch_url');
|
||||
if (out) return out;
|
||||
@ -55,9 +55,36 @@ this.recline.Backend = this.recline.Backend || {};
|
||||
dfd.reject(arguments);
|
||||
});
|
||||
return dfd.promise();
|
||||
} else if (model.__type__ == 'Document') {
|
||||
var base = this._getESUrl(model.dataset) + '/' + model.id;
|
||||
return $.ajax({
|
||||
url: base,
|
||||
dataType: 'json'
|
||||
});
|
||||
}
|
||||
} else if (method === 'update') {
|
||||
if (model.__type__ == 'Document') {
|
||||
var data = JSON.stringify(model.toJSON());
|
||||
var base = this._getESUrl(model.dataset);
|
||||
if (model.id) {
|
||||
base += '/' + model.id;
|
||||
}
|
||||
return $.ajax({
|
||||
url: base,
|
||||
type: 'POST',
|
||||
data: data,
|
||||
dataType: 'json'
|
||||
});
|
||||
}
|
||||
} else if (method === 'delete') {
|
||||
if (model.__type__ == 'Document') {
|
||||
var base = this._getESUrl(model.dataset) + '/' + model.id;
|
||||
return $.ajax({
|
||||
url: base,
|
||||
type: 'DELETE',
|
||||
dataType: 'json'
|
||||
});
|
||||
}
|
||||
} else {
|
||||
alert('This backend currently only supports read operations');
|
||||
}
|
||||
},
|
||||
_normalizeQuery: function(queryObj) {
|
||||
|
||||
@ -107,7 +107,7 @@ var sample_data = {
|
||||
"took": 2
|
||||
};
|
||||
|
||||
test("ElasticSearch", function() {
|
||||
test("ElasticSearch query", function() {
|
||||
var backend = new recline.Backend.ElasticSearch();
|
||||
var dataset = new recline.Model.Dataset({
|
||||
url: 'https://localhost:9200/my-es-db/my-es-type'
|
||||
@ -149,4 +149,64 @@ test("ElasticSearch", function() {
|
||||
$.ajax.restore();
|
||||
});
|
||||
|
||||
test("ElasticSearch write", function() {
|
||||
var backend = new recline.Backend.ElasticSearch();
|
||||
var dataset = new recline.Model.Dataset({
|
||||
url: 'http://localhost:9200/recline-test/es-write'
|
||||
},
|
||||
backend
|
||||
);
|
||||
|
||||
stop();
|
||||
|
||||
var id = parseInt(Math.random()*100000000).toString();
|
||||
var doc = new recline.Model.Document({
|
||||
id: id,
|
||||
title: 'my title'
|
||||
});
|
||||
doc.backend = backend;
|
||||
doc.dataset = dataset;
|
||||
dataset.currentDocuments.add(doc);
|
||||
var jqxhr = doc.save();
|
||||
jqxhr.done(function(data) {
|
||||
ok(data.ok);
|
||||
equal(data._id, id);
|
||||
equal(data._type, 'es-write');
|
||||
equal(data._version, 1);
|
||||
|
||||
// update
|
||||
doc.set({title: 'new title'});
|
||||
var jqxhr = doc.save();
|
||||
jqxhr.done(function(data) {
|
||||
equal(data._version, 2);
|
||||
|
||||
// delete
|
||||
var jqxhr = doc.destroy();
|
||||
jqxhr.done(function(data) {
|
||||
ok(data.ok);
|
||||
doc = null;
|
||||
|
||||
// try to get ...
|
||||
var olddoc = new recline.Model.Document({id: id});
|
||||
equal(olddoc.get('title'), null);
|
||||
olddoc.dataset = dataset;
|
||||
olddoc.backend = backend;
|
||||
var jqxhr = olddoc.fetch();
|
||||
jqxhr.done(function(data) {
|
||||
// should not be here
|
||||
ok(false, 'Should have got 404');
|
||||
}).error(function(error) {
|
||||
equal(error.status, 404);
|
||||
equal(typeof olddoc.get('title'), 'undefined');
|
||||
start();
|
||||
});
|
||||
});
|
||||
});
|
||||
}).fail(function(error) {
|
||||
console.log(error);
|
||||
ok(false, 'Basic request failed - is ElasticSearch running locally on port 9200 (required for this test!)');
|
||||
start();
|
||||
});
|
||||
});
|
||||
|
||||
})(this.jQuery);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user