Skip to content

Commit

Permalink
new feature: TrueObjectStoreBuilder supports deserialize methods
Browse files Browse the repository at this point in the history
  • Loading branch information
Maurice Müller committed May 15, 2018
1 parent c5d9f4a commit 9c9e221
Show file tree
Hide file tree
Showing 5 changed files with 51 additions and 20 deletions.
2 changes: 1 addition & 1 deletion package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
@@ -1,6 +1,6 @@
{
"name": "@esentri/true-object-store",
"version": "0.2.4",
"version": "0.2.5",
"description": "",
"keywords": [],
"main": "dist/true-object-store.umd.js",
Expand Down
8 changes: 1 addition & 7 deletions src/TrueObjectStore.ts
Expand Up @@ -8,16 +8,14 @@ export class TrueObjectStore<KEY, TYPE> {
private parameters: IDBObjectStoreParameters
private serialize: Serialize
private deserializer: Deserializer<TYPE>
private type: any
private allStrategy: AllStrategy<TYPE>

constructor (name: string,
parameters: IDBObjectStoreParameters,
deserializer: Deserializer<TYPE>,
serialize: Serialize = SimpleSerialize,
database?: IDBDatabase,
allStrategy: AllStrategy<TYPE> = AllStrategy.oldBrowsers(deserializer),
type: any = null) {
allStrategy: AllStrategy<TYPE> = AllStrategy.oldBrowsers(deserializer)) {
if (!parameters.keyPath)
throw new Error('no key path added')
this.name = name
Expand All @@ -26,7 +24,6 @@ export class TrueObjectStore<KEY, TYPE> {
this.deserializer = deserializer
this.database = database
this.allStrategy = allStrategy
this.type = type
}

__database (database: IDBDatabase) {
Expand Down Expand Up @@ -61,9 +58,6 @@ export class TrueObjectStore<KEY, TYPE> {
})
return
}
this.type.deserialize(event.target.result).then((deserialized: any) => {
resolve(deserialized)
})
}
/* istanbul ignore next */
readRequest.onerror = error => reject(error)
Expand Down
14 changes: 10 additions & 4 deletions src/TrueObjectStoreBuilder.ts
@@ -1,4 +1,4 @@
import {Serialize, SimpleSerialize, Deserializer} from '@esentri/de-serializer'
import {Serialize, SimpleSerialize, Deserializer, Deserialize} from '@esentri/de-serializer'
import {TrueObjectStore} from './TrueObjectStore'
import {AllStrategy} from './allStrategy/AllStrategy'

Expand Down Expand Up @@ -31,6 +31,13 @@ export class TrueObjectStoreBuilder<KEY, TYPE> {
return this
}

deserialize (value: Deserialize<TYPE>): TrueObjectStoreBuilder<KEY, TYPE> {
this._deserializer = {
deserialize: value as any
}
return this
}

deserializer (value: Deserializer<TYPE>): TrueObjectStoreBuilder<KEY, TYPE> {
this._deserializer = value
return this
Expand All @@ -51,11 +58,10 @@ export class TrueObjectStoreBuilder<KEY, TYPE> {
return new TrueObjectStore<KEY, TYPE>(
this._name!,
this._parameters!,
this._deserializer!,
this._deserializer || Deserializer.simple(this._type),
this._serialize,
this._database,
this.allStrategy(),
this._type
this.allStrategy()
)
}

Expand Down
45 changes: 38 additions & 7 deletions test/trueObjectStore/TrueObjectStore.load.test.ts
Expand Up @@ -7,11 +7,11 @@ import {SimpleIndexedDBBuilder} from '../../src/SimpleIndexedDBBuilder'
class KeyClass {
private _key: string

constructor(key: string) {
this._key = key;
constructor (key: string) {
this._key = key
}

get key() {
get key () {
return this._key
}
}
Expand All @@ -23,23 +23,23 @@ class TestClass {
c: 'nested'
}

public setNested(nested: string) {
public setNested (nested: string) {
this.b.c = nested
}

public nested() {
public nested () {
return this.b.c
}
}

class TestClassCustomDeserialize {
private field: string = 'init'

public value(): string {
public value (): string {
return this.field
}

public static deserialize(dataStructure: any): Promise<TestClassCustomDeserialize> {
public static deserialize (dataStructure: any): Promise<TestClassCustomDeserialize> {
return new Promise(resolve => {
let deserialized = new TestClassCustomDeserialize()
deserialized.field = 'deserialized'
Expand Down Expand Up @@ -286,4 +286,35 @@ describe('TrueObjectStore test loading', () => {
})
})
})

it('load object with deserialize method', done => {
dbVersion++
let objectStoreName = 'deserializeMethod'
let trueObjectStore: TrueObjectStore<string, TestClass> =
new TrueObjectStoreBuilder<string, TestClass>()
.name(objectStoreName)
.deserialize(dataStructure => new Promise(resolve => {
let testClass = new TestClass()
testClass.setNested('custom method')
resolve(testClass)
}))
.parameters({autoIncrement: true, keyPath: 'key'})
.build()
let simpleIndexedDB = new SimpleIndexedDBBuilder()
.name(dbName)
.databaseFactory(IndexDB.default)
.dbVersion(dbVersion)
.objectStores([trueObjectStore])
.build()
simpleIndexedDB.open().then(() => {
let savedObject = new TestClass()
trueObjectStore.save(savedObject).then(() => {
trueObjectStore.value(savedObject.key).then(loadedObject => {
expect(loadedObject.nested()).toEqual('custom method')
simpleIndexedDB.close()
done()
})
})
})
})
})

0 comments on commit 9c9e221

Please sign in to comment.