jaydata-librets
Version:
A node.js driver for libRETS
77 lines (63 loc) • 2.25 kB
JavaScript
var Readable = require('stream').Readable
, utils = require('./utils')
, inherits = require('util').inherits;
var Scope = function(collection, _selector, _fields, _scope_options) {
var self = this;
// Ensure we have at least an empty cursor options object
_scope_options = _scope_options || {};
var _write_concern = _scope_options.write_concern || null;
// Ensure default read preference
if(!_scope_options.readPreference) _scope_options.readPreference = {readPreference: 'primary'};
// Write branch options
var writeOptions = {
insert: function(documents, callback) {
// Merge together options
var options = _write_concern || {};
// Execute insert
collection.insert(documents, options, callback);
},
save: function(document, callback) {
// Merge together options
var save_options = _write_concern || {};
// Execute save
collection.save(document, save_options, function(err, result) {
if(typeof result == 'number' && result == 1) {
return callback(null, document);
}
return callback(null, document);
});
},
find: function(selector) {
_selector = selector;
return writeOptions;
},
//
// Update is implicit multiple document update
update: function(operations, callback) {
// Merge together options
var update_options = _write_concern || {};
// Set up options, multi is default operation
update_options.multi = _scope_options.multi ? _scope_options.multi : true;
if(_scope_options.upsert) update_options.upsert = _scope_options.upsert;
// Execute options
collection.update(_selector, operations, update_options, function(err, result, obj) {
callback(err, obj);
});
},
}
// Set write concern
this.withWriteConcern = function(write_concern) {
// Save the current write concern to the Scope
_scope_options.write_concern = write_concern;
_write_concern = write_concern;
// Only allow legal options
return writeOptions;
}
// Start find
this.find = function(selector, options) {
// Save the current selector
_selector = selector;
return null;
}
}
exports.Scope = Scope;