Skip to content

Commit

Permalink
Merge ac6d53d into e0ccf89
Browse files Browse the repository at this point in the history
  • Loading branch information
talyssonoc committed Oct 8, 2019
2 parents e0ccf89 + ac6d53d commit 91b09ce
Show file tree
Hide file tree
Showing 6 changed files with 38 additions and 4 deletions.
4 changes: 2 additions & 2 deletions src/v2/example.js
@@ -1,5 +1,5 @@
const { attributes } = require('./src');
const { SCHEMA } = require('./src/symbols');
// const { SCHEMA } = require('./src/symbols');

const User = attributes({
name: String,
Expand All @@ -10,4 +10,4 @@ const User = attributes({
})(class User {});

const user = new User({ name: 'Name', age: 2 });
// console.log(user.name, user.age, user.attributes);
console.log(user.name, user.age, user.attributes);
22 changes: 22 additions & 0 deletions src/v2/src/cloning/index.js
@@ -0,0 +1,22 @@
exports.for = function cloneFor(StructureClass) {
return {
clone(overwrites = {}, options = {}) {
const { strict } = options;

const newAttributes = {
...this.attributes,
...overwrites,
};

let cloneInstance;

if (strict) {
cloneInstance = StructureClass.buildStrict(newAttributes);
} else {
cloneInstance = new StructureClass(newAttributes);
}

return cloneInstance;
},
};
};
12 changes: 12 additions & 0 deletions src/v2/src/descriptors/index.js
Expand Up @@ -2,6 +2,7 @@ const { isObject } = require('lodash');
const { SCHEMA, ATTRIBUTES } = require('../symbols');
const Errors = require('../../../errors');
const StrictMode = require('../strictMode');
const Cloning = require('../cloning');
const { defineProperty } = Object;

class Descriptors {
Expand All @@ -17,6 +18,7 @@ class Descriptors {
this.setEachAttributeGetterAndSetter();
this.setValidation();
this.setSerialization();
this.setCloning();
}

setSchema() {
Expand Down Expand Up @@ -106,6 +108,16 @@ class Descriptors {
},
});
}

setCloning() {
const { StructureClass } = this;

const cloning = Cloning.for(StructureClass);

defineProperty(StructureClass.prototype, 'clone', {
value: cloning.clone,
});
}
}

module.exports = Descriptors;
2 changes: 1 addition & 1 deletion src/v2/src/validation/validations/nested.js
@@ -1,5 +1,5 @@
const joi = require('@hapi/joi');
const { SCHEMA, VALIDATE } = require('../../symbols');
const { SCHEMA } = require('../../symbols');
const { requiredOption } = require('./utils');

exports.forType = function nestedValidationForType(attributeDefinition) {
Expand Down
2 changes: 1 addition & 1 deletion test/unit/validation/array.spec.js
@@ -1,4 +1,4 @@
const { attributes } = require('../../../src/');
const { attributes } = require('../../../src/v2/src');
const { assertValid, assertInvalid } = require('../../support/validationMatchers');

describe('validation', () => {
Expand Down

0 comments on commit 91b09ce

Please sign in to comment.