improve persistent class
This commit is contained in:
parent
ac79bf8ef7
commit
ac3296387e
46
lib/Persistent.ts
Normal file
46
lib/Persistent.ts
Normal file
@ -0,0 +1,46 @@
|
||||
import { Assignable, Serializable } from './interfaces';
|
||||
|
||||
export abstract class Persistent implements Assignable, Serializable {
|
||||
private _data: Record<string, unknown> = {};
|
||||
private _properties: Record<string, string>;
|
||||
|
||||
public constructor (props: Record<string, string>) {
|
||||
this._properties = props;
|
||||
}
|
||||
|
||||
public assign (a: Assignable): void {
|
||||
this.assign_object (a.to_object ());
|
||||
}
|
||||
|
||||
public assign_to (a: Assignable): void {
|
||||
a.assign (this);
|
||||
}
|
||||
|
||||
public assign_object (obj: Record<string, unknown>): void {
|
||||
for (const key of Object.keys (obj)) {
|
||||
const prop = this._properties[key];
|
||||
if (typeof prop !== 'undefined' && typeof obj[key] === prop)
|
||||
this._data[key] = obj[key];
|
||||
}
|
||||
}
|
||||
|
||||
public to_object (): Record<string, unknown> {
|
||||
return this._data;
|
||||
}
|
||||
|
||||
public serialize (formatted = false): string {
|
||||
if (formatted)
|
||||
return JSON.stringify (this.to_object ());
|
||||
return JSON.stringify (this.to_object (), null, 2);
|
||||
}
|
||||
|
||||
public set (key: string, value: unknown): void {
|
||||
const prop = this._properties[key];
|
||||
if (typeof prop !== 'undefined' && typeof value === prop)
|
||||
this._data[key] = value;
|
||||
}
|
||||
|
||||
public get (key: string): unknown {
|
||||
return this._data[key];
|
||||
}
|
||||
}
|
@ -1,34 +1,5 @@
|
||||
export interface Assignable {
|
||||
assign (a: Assignable): void;
|
||||
assign_to (a: Assignable): void;
|
||||
}
|
||||
|
||||
export abstract class Persistent {
|
||||
private data: Record<string, unknown> = {};
|
||||
private properties: Record<string, string>;
|
||||
|
||||
public constructor() {
|
||||
this.properties = this.define_properties();
|
||||
}
|
||||
|
||||
public abstract define_properties(): Record<string, string>;
|
||||
|
||||
public assign (da: Assignable): void {
|
||||
this.assign_object (da.get_data ());
|
||||
}
|
||||
|
||||
public assign_to (da: Assignable): void {
|
||||
da.assign (this);
|
||||
}
|
||||
|
||||
public assign_object (obj: Record<string, unknown>): void {
|
||||
for (const key of Object.keys (obj))
|
||||
this.data[key] = obj[key];
|
||||
}
|
||||
|
||||
public get_data (): Record<string, unknown> {
|
||||
return this.data;
|
||||
}
|
||||
|
||||
wip
|
||||
to_object (): Record<string, unknown>;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user