nis-model
Advanced tools
Comparing version 0.6.20 to 0.6.21
@@ -54,8 +54,13 @@ 'use strict'; | ||
// parsing | ||
resourceListKey:'hits.hits', // list of resources - if there is no wrapper in response object, so data is resource, resourceKey:'this' | ||
resourceKey:'_source', // single resource data - if there is no wrapper in response object, so data is resource, resourceKey:'this' | ||
idKey:'id', // key of id, sometimes id is represented by another key, like "_id", or "productId" | ||
countKey:'hits.total', // if response contains count | ||
errorKey:'error', // if response status !== 200, parse errors | ||
dataKey: 'this', // data key, if data is property of response object, e.g. { data:..., status:...} | ||
resourceListKey: 'hits.hits', // list of resources - if there is no wrapper in response object, data is resource, resourceListKey:'this' | ||
resourceKey: '_source', // single resource data - if there is no wrapper in response object, data is resource, resourceKey:'this' | ||
idKey: 'id', // key of id, sometimes id is represented by another key, like "_id", or "productId" | ||
countKey: 'hits.total', // if response contains count | ||
errorKey: 'error', // if response status !== 200, parse errors | ||
keys:{ | ||
'aggregations':'aggregations' | ||
}, | ||
// CRUD defaults | ||
@@ -188,7 +193,7 @@ one:{ | ||
for(var fieldKey in defaults.options.fields){ | ||
if(defaults.options.fields[fieldKey] === 1 && fieldKey !== 'id'){ | ||
if(defaults.options.fields[fieldKey] && fieldKey !== 'id'){ | ||
elasticQuery._source.include = elasticQuery._source.include || []; | ||
elasticQuery._source.include.push(fieldKey); | ||
} | ||
else if(defaults.options.fields[fieldKey] === -1 && fieldKey !== 'id') { | ||
else if(!defaults.options.fields[fieldKey] && fieldKey !== 'id') { | ||
elasticQuery._source.exclude = elasticQuery._source.exclude || []; | ||
@@ -219,3 +224,3 @@ elasticQuery._source.exclude.push(fieldKey); | ||
} | ||
//console.warn(elasticQuery); | ||
return elasticQuery; | ||
@@ -241,3 +246,2 @@ }; | ||
//console.warn(method, url, JSON.stringify(query), JSON.stringify(body)); | ||
var req = request(method, url).set(headers).query(query); | ||
@@ -261,3 +265,2 @@ if(body) req.send(body); | ||
//console.warn(url, reqData, defaults.query.id, defaults.connection.command); | ||
return url; | ||
@@ -315,3 +318,2 @@ }; | ||
throw new Error('ElasticSearchDataSource: Cannot ensure ElasticSearch mappings "' +indexUrl +'/'+ type +'/_mapping'+ '" ' + JSON.stringify(err || res.body || '')); | ||
//console.warn(data, JSON.stringify(mapping)); | ||
} | ||
@@ -318,0 +320,0 @@ else { |
@@ -33,4 +33,5 @@ 'use strict'; | ||
// parsing | ||
resourceListKey:'data', // list of resources - if there is no wrapper in response object, so data is resource, resourceKey:'this' | ||
resourceKey:'data', // single resource data - if there is no wrapper in response object, so data is resource, resourceKey:'this' | ||
dataKey:'data', // data key, if data is property of response object, e.g. { data:..., status:...} | ||
resourceListKey: 'this', // list of resources - if there is no wrapper in response object, data is resource, resourceListKey:'this' | ||
resourceKey: 'this', // single resource data - if there is no wrapper in response object, data is resource, resourceKey:'this' | ||
idKey:'id', // key of id, sometimes id is represented by another key, like "_id", or "productId" | ||
@@ -40,6 +41,11 @@ countKey:'pagination.count', // if response contains count | ||
// aditional data to map to result - will be added only if it is defined in response | ||
keys:{ | ||
// 'data.max_score':'maxScore' - example result of "one" { id:..., maxScore:24 }, or "all" [{ id:... }, { id:... }].maxScore = 24 | ||
}, | ||
// CRUD defaults | ||
one:{ | ||
method:'GET', | ||
// idKey, resourceKey, resourceListKey, errorKey, countKey // replace default resourceKey | ||
// idKey, dataKey, resourceKey, resourceListKey, errorKey, countKey // replace default resourceKey | ||
// headers:{} extends default headers | ||
@@ -166,3 +172,3 @@ }, | ||
query = ModelCnst.buildQuery(defaults, reqData), | ||
body = ModelCnst.buildQuery(defaults, reqData); | ||
body = ModelCnst.buildBody(defaults, reqData); | ||
@@ -180,9 +186,16 @@ var req = request(method, url).set(headers).query(query); | ||
// if requested single resource | ||
Rest.addMethod('parseResource', function(defaults, resStatus, resData){ | ||
Rest.addMethod('parseResource', function(defaults, resStatus, resData, resource){ | ||
var dataKey = (defaults.connection[ defaults.connection.command ]||{}).dataKey || defaults.connection.dataKey || ''; | ||
var resourceKey = (defaults.connection[ defaults.connection.command ]||{}).resourceKey || defaults.connection.resourceKey; | ||
var idKey = (defaults.connection[ defaults.connection.command ]||{}).idKey || defaults.connection.idKey; | ||
var resource = object.getValue(resData, resourceKey); | ||
if(resource){ | ||
resource = object.getValue(resource, resourceKey); | ||
} | ||
else if(resData){ | ||
var data = object.getValue(resData, dataKey); | ||
resource = object.getValue(data, resourceKey); | ||
} | ||
if(resource) resource.id = object.getValue(resource, idKey); | ||
return resource; | ||
@@ -192,13 +205,14 @@ }); | ||
// if requested list of resources | ||
Rest.addMethod('parseResourceList', function(defaults, resStatus, resData){ | ||
Rest.addMethod('parseResourceList', function(defaults, resStatus, resData, resources){ | ||
var ModelCnst = this; | ||
var dataKey = (defaults.connection[ defaults.connection.command ]||{}).dataKey || defaults.connection.dataKey || ''; | ||
var resourceListKey = (defaults.connection[ defaults.connection.command ]||{}).resourceListKey || defaults.connection.resourceListKey; | ||
var resourceKey = (defaults.connection[ defaults.connection.command ]||{}).resourceKey || defaults.connection.resourceKey; | ||
var data = object.getValue(resData, resourceListKey); | ||
var data = resources || object.getValue(resData, dataKey); | ||
if(resourceListKey) data = object.getValue(data, resourceListKey); | ||
var list = []; | ||
if(Array.isArray(data)) for(var i=0;i<data.length;i++){ | ||
list.push(ModelCnst.parseResource(defaults, resStatus, data[i])); | ||
list.push(ModelCnst.parseResource(defaults, resStatus, null, data[i])); | ||
} | ||
@@ -221,2 +235,13 @@ return list; | ||
// if responce contains count | ||
Rest.addMethod('parseKeys', function(defaults, resStatus, resData, parsedData){ | ||
var keys = (defaults.connection[ defaults.connection.command ]||{}).keys || defaults.connection.keys || {}; | ||
var value; | ||
for(var key in keys){ | ||
value = object.getValue(resData, key); | ||
if(value !== undefined) object.setValue(parsedData, keys[key], value); | ||
} | ||
return parsedData; | ||
}); | ||
@@ -290,2 +315,3 @@ /* | ||
var count = ModelCnst.parseCount(defaults, res.status, res.body); | ||
data = ModelCnst.parseKeys(defaults, res.status, res.body, data); | ||
done(null, data, count); | ||
@@ -340,2 +366,4 @@ } | ||
allItems = ModelCnst.parseKeys(defaults, res.status, res.body, items); | ||
if(!Array.isArray(items)) done(null, allItems, count); // items is not array, maybe request to single resource, or cannot get items data | ||
@@ -348,3 +376,2 @@ else if(!defaults.options.autoPaging) done(null, allItems, count); // auto pagign is disabled | ||
else { | ||
// autoPaging - get next page | ||
@@ -351,0 +378,0 @@ defaults.options.skip = readItemsCount; |
{ | ||
"name": "nis-model", | ||
"preferGlobal": false, | ||
"version": "0.6.20", | ||
"version": "0.6.21", | ||
"author": "NIS - Matus Szabo <hello@nowitssimple.com>", | ||
@@ -6,0 +6,0 @@ "description": "Advanced, database agnostic ODM", |
@@ -52,2 +52,5 @@ 'use strict'; | ||
// default timeout to wait for elasticsearch to ensure data will be indexed | ||
var timeout = 2000; | ||
/* | ||
@@ -107,3 +110,3 @@ * helper for comparing data, because createDT and modifiedDT will be different | ||
console.log('ElasticSearchDataSource: collection.remove all - OK'); | ||
setTimeout(next, 1100); | ||
setTimeout(next, timeout); | ||
}); | ||
@@ -141,3 +144,3 @@ }); | ||
}); | ||
}, 1100); | ||
}, timeout); | ||
}); | ||
@@ -171,2 +174,3 @@ | ||
// TODO: test exec method | ||
// exec | ||
@@ -218,3 +222,3 @@ //s.add(function(next){ | ||
}); | ||
},1100); | ||
}, timeout); | ||
}); | ||
@@ -237,3 +241,3 @@ }); | ||
}); | ||
}, 1100); | ||
}, timeout); | ||
}); | ||
@@ -297,3 +301,3 @@ }); | ||
console.log('ElasticSearchDataSource: instance.create - OK'); | ||
setTimeout(next, 1100); | ||
setTimeout(next, timeout); | ||
}); | ||
@@ -316,3 +320,3 @@ }); | ||
console.log('ElasticSearchDataSource: instance.update - OK'); | ||
setTimeout(next, 1100); | ||
setTimeout(next, timeout); | ||
}); | ||
@@ -345,3 +349,3 @@ }); | ||
}); | ||
}, 1100); | ||
}, timeout); | ||
}); | ||
@@ -348,0 +352,0 @@ }); |
332177
7506