Socket
Socket
Sign inDemoInstall

ormnomnom

Package Overview
Dependencies
10
Maintainers
4
Versions
62
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 5.2.1 to 5.2.2

47

decorators/softdelete.js

@@ -37,26 +37,35 @@ 'use strict'

const filterChildren = query => {
const q = Object.assign({}, { [`${column}:isNull`]: true }, query)
for (const key in q) {
const path = key.split(':')[0]
const bits = path.split('.')
let ddl = wrappedDao[privateAPISym].ddl
for (let i = 0; i < bits.length - 1; ++i) {
const reference = bits[i]
if (!(reference in ddl) || !(softDeleteSym in ddl[reference].cls[clsToDAOSym])) {
continue
}
const segment = bits.slice(0, i + 1)
q[`${segment.join('.')}.${ddl[reference].cls[clsToDAOSym][softDeleteSym]}:isNull`] = true
ddl = ddl[reference].cls[clsToDAOSym][privateAPISym].ddl
}
}
return q
}
const queryBuilder = query =>
Array.isArray(query)
? query.map(q => filterChildren(q))
: filterChildren(query)
class SoftDeleteQuerySet extends queryset.constructor {
get (query) {
return super.get(Object.assign({}, {[`${column}:isNull`]: true}, query))
return super.get(queryBuilder(query))
}
filter (query) {
const q = Object.assign({}, {[`${column}:isNull`]: true}, query)
for (const key in q) {
const path = key.split(':')[0]
const bits = path.split('.')
let ddl = wrappedDao[privateAPISym].ddl
for (let i = 0; i < bits.length - 1; ++i) {
const reference = bits[i]
if (!(reference in ddl) || !(softDeleteSym in ddl[reference].cls[clsToDAOSym])) {
continue
}
const segment = bits.slice(0, i + 1)
q[`${segment.join('.')}.${ddl[reference].cls[clsToDAOSym][softDeleteSym]}:isNull`] = true
ddl = ddl[reference].cls[clsToDAOSym][privateAPISym].ddl
}
}
return super.filter(q)
return super.filter(queryBuilder(query))
}

@@ -63,0 +72,0 @@

{
"name": "ormnomnom",
"version": "5.2.1",
"version": "5.2.2",
"description": "a lightweight orm to silence the orm-y beast",

@@ -5,0 +5,0 @@ "main": "lib/ormnomnom.js",

@@ -313,5 +313,4 @@ 'use strict'

test('softdelete: filter() extends queries to filter soft deleted objects', assert => {
test('softdelete: filter() extends queries to filter soft deleted objects and arrays', assert => {
Item.wrappedObjects = softDelete(Item.objects, {column: 'deleted'})
return Item.objects.create({name: 'test'}).then(item => {

@@ -327,6 +326,12 @@ return Item.wrappedObjects.delete({name: 'test'})

assert.equals(items.length, 0, 'should return no rows')
return Item.wrappedObjects.filter([
{name: 'test'},
{name: 'not a name of any item'}
])
}).then(items => {
assert.equals(items.length, 0, 'should return no rows with OR query')
})
})
test('softdelete: get() extends queries to filter soft deleted objects', assert => {
test('softdelete: get() extends queries to filter soft deleted objects and arrays', assert => {
Item.wrappedObjects = softDelete(Item.objects, {column: 'deleted'})

@@ -338,6 +343,22 @@

assert.equals(deleted, 1, 'should have soft deleted one row')
test('get on softdelete should reject', assert => {
assert.plan(1)
assert.rejects(
Item.wrappedObjects.get({name: 'test'}),
Item.objects.NotFound
)
})
test('get on softdelete should reject with OR query', assert => {
assert.plan(1)
assert.rejects(
Item.wrappedObjects.get([
{name: 'test'},
{name: 'not a name of any item'}
]),
Item.objects.NotFound
)
})
return Item.objects.get({name: 'test'})
}).then(item => {
assert.notEqual(item.deleted, null, 'deleted column should be set')
assert.rejects(Item.wrappedObjects.get({name: 'test'}), Item.objects.NotFound)
})

@@ -360,3 +381,10 @@ })

}).then(details => {
assert.equals(details.length, 0, 'should find no results due to deleted item')
assert.equals(details.length, 0, 'filter should find no results due to deleted item')
test('get should find no results due to deleted item', assert => {
assert.plan(1)
assert.rejects(
ItemDetail.wrappedObjects.get({'item.name': 'test'}),
ItemDetail.objects.NotFound
)
})
return ItemDetail.wrappedObjects.filter({'item_prices.price:gt': 5})

@@ -366,2 +394,5 @@ }).then(details => {

assert.equals(details[0].id, detail.id, 'should have found the correct item detail')
return ItemDetail.wrappedObjects.get({'item_prices.price:gt': 5})
}).then(d => {
assert.equals(d.id, detail.id, 'get() should find one result')
})

@@ -368,0 +399,0 @@ })

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc