Comparing version 0.1.7 to 0.1.8
@@ -125,2 +125,11 @@ var aws = require('aws-sdk'); | ||
}; | ||
if (table.rangeKey) { | ||
schema.KeySchema.push({ | ||
AttributeName: table.rangeKey, | ||
KeyType: 'RANGE' | ||
}); | ||
schema.AttributeDefinitions.push( | ||
toAttrDef(table.rangeKey, table.properties[table.rangeKey]) | ||
); | ||
} | ||
return db.createTable(schema); | ||
@@ -146,5 +155,11 @@ }; | ||
var primaryKey = options.tables[msg.table].primaryKey; | ||
var rangeKey = options.tables[msg.table].rangeKey; | ||
expected[primaryKey] = { | ||
Exists: false | ||
}; | ||
if (rangeKey) { | ||
expected[rangeKey] = { | ||
Exists: false | ||
}; | ||
} | ||
return ops.set(msg, expected); | ||
@@ -155,4 +170,11 @@ }, | ||
if (msg.key) { | ||
var keyAttr = options.tables[msg.table].primaryKey; | ||
attributes[keyAttr] = msg.key; | ||
var primaryKey = options.tables[msg.table].primaryKey; | ||
var rangeKey = options.tables[msg.table].rangeKey; | ||
if (rangeKey) { | ||
var parts = msg.key.split('/'); | ||
attributes[primaryKey] = parts[0]; | ||
attributes[rangeKey] = parts[1]; | ||
} else { | ||
attributes[primaryKey] = msg.key; | ||
} | ||
} | ||
@@ -174,4 +196,10 @@ var item = toItem(attributes); | ||
var key = {}; | ||
var keyAttr = options.tables[msg.table].primaryKey; | ||
key[keyAttr] = toAttr(msg.key); | ||
var primaryKey = options.tables[msg.table].primaryKey; | ||
var rangeKey = options.tables[msg.table].rangeKey; | ||
key[primaryKey] = toAttr(msg.key); | ||
if (rangeKey) { | ||
var parts = msg.key.split('/'); | ||
key[primaryKey] = toAttr(parts[0]); | ||
key[rangeKey] = toAttr(parts[1]); | ||
} | ||
return db.getItem({ | ||
@@ -185,5 +213,8 @@ TableName: msg.table, | ||
var value = toValue(res.Item); | ||
if (keyAttr in value) { | ||
delete value[keyAttr]; | ||
if (primaryKey in value) { | ||
delete value[primaryKey]; | ||
} | ||
if (rangeKey && rangeKey in value) { | ||
delete value[rangeKey]; | ||
} | ||
return { | ||
@@ -198,2 +229,3 @@ key: msg.key, | ||
var primaryKey = options.tables[msg.table].primaryKey; | ||
var rangeKey = options.tables[msg.table].rangeKey; | ||
var key = {}; | ||
@@ -203,2 +235,5 @@ if (msg.filters[primaryKey]) { | ||
} | ||
if (msg.filters[rangeKey]) { | ||
key[rangeKey] = toAttr(msg.filters[rangeKey]); | ||
} | ||
var req = { | ||
@@ -205,0 +240,0 @@ TableName: msg.table, |
{ | ||
"name": "keydb", | ||
"version": "0.1.7", | ||
"version": "0.1.8", | ||
"description": "Key/value data/query API to use on the server and in the browser.", | ||
@@ -5,0 +5,0 @@ "main": "index-server.js", |
@@ -22,4 +22,4 @@ /* global describe, it */ | ||
var testDatabase = function (type, ops) { | ||
ops = ops || {}; | ||
var testDatabase = function (type, options) { | ||
options = options || {}; | ||
describe(type + ' driver test', function () { | ||
@@ -46,2 +46,20 @@ var db = keydb(); | ||
primaryKey: 'user_id' | ||
}, | ||
log: { | ||
properties: { | ||
user_id: { | ||
type: 'string', | ||
maxLength: 100 | ||
}, | ||
time_stamp: { | ||
type: 'string', | ||
maxLength: 100 | ||
}, | ||
action: { | ||
type: 'string', | ||
maxLength: 100 | ||
} | ||
}, | ||
primaryKey: 'user_id', | ||
rangeKey: 'time_stamp' | ||
} | ||
@@ -104,3 +122,3 @@ }, | ||
}); | ||
if (ops.get) { | ||
if (options.get) { | ||
it('should get updated', function () { | ||
@@ -125,3 +143,3 @@ return db({op: 'get', table: 'user', key: 'joe'}) | ||
}); | ||
if (ops.get) { | ||
if (options.get) { | ||
it('should not get deleted', function () { | ||
@@ -131,3 +149,3 @@ return expect(db({op: 'get', table: 'user', key: 'joe'})).to.be.rejectedWith(keydb.error.NotFound); | ||
} | ||
if (ops.set) { | ||
if (options.set) { | ||
it('should set value', function () { | ||
@@ -144,2 +162,14 @@ var promise = db({op: 'set', key: 'joe', value: {first_name: 'Joe', last_name: 'Baz'}, table: 'user'}) | ||
} | ||
if (options.range) { | ||
it('should log action for user', function () { | ||
return db({op: 'set', key: 'joe/2014-01-01T12:00:00Z', table: 'log', value: {action: 'login'}}); | ||
}); | ||
it('should get action for user', function () { | ||
var promise = db({op: 'get', key: 'joe/2014-01-01T12:00:00Z', table: 'log'}) | ||
.then(function (msg) { | ||
return msg.value; | ||
}); | ||
return expect(promise).to.eventually.eql({action: 'login'}); | ||
}); | ||
} | ||
}); | ||
@@ -149,2 +179,2 @@ }; | ||
testDatabase('mysql'); | ||
testDatabase('dynamo', {get: true, set: true}); | ||
testDatabase('dynamo', {get: true, set: true, range: true}); |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
73403
2244