Skip to content

Commit c838e31

Browse files
author
Robert S
committed
ConversionTypeEnum.String now coverts objects with JSON.stringify.
1 parent b71a989 commit c838e31

File tree

4 files changed

+40
-19
lines changed

4 files changed

+40
-19
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -318,6 +318,8 @@ export default class CarModel extends BaseModel {
318318

319319
## Release History
320320

321+
- 2019-01-28 v1.8.2 ConversionTypeEnum.String now coverts objects with JSON.stringify.
322+
321323
- 2019-01-28 v1.8.1 Returns the original data for ConversionTypeEnum.JSON if parse fails.
322324

323325
- 2019-01-17 v1.8.0 Fix issue with webpack builds.

__tests__/Util.test.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ describe('Util', () => {
9898
expect(Util.convertDataToConversionType(1.11, ConversionTypeEnum.String)).toEqual('1.11');
9999
expect(Util.convertDataToConversionType(false, ConversionTypeEnum.String)).toEqual('false');
100100
expect(Util.convertDataToConversionType(null, ConversionTypeEnum.String)).toEqual(null);
101+
expect(Util.convertDataToConversionType(json, ConversionTypeEnum.String)).toEqual(JSON.stringify(json));
101102
expect(Util.convertDataToConversionType('1.11', ConversionTypeEnum.String)).toEqual('1.11'); // should return same
102103

103104
expect(Util.convertDataToConversionType(JSON.stringify(json), ConversionTypeEnum.JSON)).toEqual(json);
@@ -150,4 +151,21 @@ describe('Util', () => {
150151
}).toThrow(SyntaxError);
151152
});
152153
});
154+
155+
test('Util.isObject', () => {
156+
expect(Util.isObject(undefined)).toBeFalsy();
157+
expect(Util.isObject(null)).toBeFalsy();
158+
expect(Util.isObject(1)).toBeFalsy();
159+
expect(Util.isObject('string')).toBeFalsy();
160+
expect(Util.isObject([])).toBeFalsy();
161+
162+
expect(Util.isObject({})).toBeTruthy();
163+
expect(Util.isObject(json)).toBeTruthy();
164+
});
165+
166+
test('Util.isObjectWithProperties', () => {
167+
expect(Util.isObjectWithProperties({})).toBeFalsy();
168+
169+
expect(Util.isObjectWithProperties(json)).toBeTruthy();
170+
});
153171
});

src/BaseModel.ts

Lines changed: 2 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -241,7 +241,7 @@ export class BaseModel extends BaseObject implements IBaseModel {
241241
protected _updateData(currentPropertyData: any, passedInDataForProperty: any): any {
242242
const isBaseModelObject: boolean = this._isBaseModelObject(currentPropertyData);
243243
const isBaseModelClass: boolean = this._isBaseModelClass(currentPropertyData);
244-
const isPassedInDataAnObjectWithProperties: boolean = this._isObjectWithProperties(passedInDataForProperty);
244+
const isPassedInDataAnObjectWithProperties: boolean = Util.isObjectWithProperties(passedInDataForProperty);
245245

246246
if (isBaseModelObject === true && isPassedInDataAnObjectWithProperties === true) {
247247
// Call the update method on th BaseModel object and give it the passed in data.
@@ -291,28 +291,11 @@ export class BaseModel extends BaseObject implements IBaseModel {
291291
return currentPropertyData instanceof BaseModel;
292292
}
293293

294-
/**
295-
* Check the data is an object with properties.
296-
*
297-
* @method _isObjectWithProperties
298-
* @param data
299-
* @returns {boolean}
300-
* @protected
301-
*/
302-
protected _isObjectWithProperties(data: any): boolean {
303-
return this._isObject(data) && Object.keys(data).length > 0;
304-
}
305-
306294
/**
307295
* Check if the data is an object.
308-
*
309-
* @method _isObject
310-
* @param data
311-
* @returns {boolean}
312-
* @protected
313296
*/
314297
protected _isObject(data: any, consoleError: boolean = false): boolean {
315-
const isObject: boolean = Boolean(data) && Array.isArray(data) === false && typeof data === 'object';
298+
const isObject: boolean = Util.isObject(data);
316299

317300
if (isObject === false && consoleError === true) {
318301
console.error(`Something is wrong! ${this.getClassName()} only allows Objects but "${data}" was passed in.`);

src/Util.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,10 @@ export class Util {
169169
case ConversionTypeEnum.Number:
170170
return propertyData === null ? null : parseInt(propertyData as string, 10);
171171
case ConversionTypeEnum.String:
172+
if (Util.isObject(propertyData)) {
173+
return JSON.stringify(propertyData);
174+
}
175+
172176
return propertyData === null ? null : String(propertyData);
173177
case ConversionTypeEnum.JSON:
174178
try {
@@ -180,4 +184,18 @@ export class Util {
180184
return propertyData;
181185
}
182186
}
187+
188+
/**
189+
* Check the data is an object with properties.
190+
*/
191+
public static isObjectWithProperties(data: any): boolean {
192+
return Util.isObject(data) && Object.keys(data).length > 0;
193+
}
194+
195+
/**
196+
* Check if the data is an object.
197+
*/
198+
public static isObject(data: any): boolean {
199+
return Boolean(data) && Array.isArray(data) === false && typeof data === 'object';
200+
}
183201
}

0 commit comments

Comments
 (0)