Skip to content

Commit 8cd6732

Browse files
committed
Add operations + removed TransformBuilder.
1 parent bf69234 commit 8cd6732

5 files changed

Lines changed: 86 additions & 18 deletions

File tree

builders.js

Lines changed: 51 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ const hasOwnProperty = Object.prototype.hasOwnProperty;
3535
const Qs = require('querystring');
3636

3737
var schemas = {};
38+
var operations = {};
3839
var transforms = { pagination: {}, error: {}, transformbuilder: {}, restbuilder: {} };
3940

4041
function SchemaBuilder(name) {
@@ -2387,7 +2388,9 @@ exports.newschema = function(group, name) {
23872388
if (!schemas[group])
23882389
schemas[group] = new SchemaBuilder(group);
23892390

2390-
return schemas[group].create(name);
2391+
var o = schemas[group].create(name);
2392+
o.owner = F.$owner();
2393+
return o;
23912394
};
23922395

23932396
/**
@@ -3319,6 +3322,8 @@ function TransformBuilder() {}
33193322

33203323
TransformBuilder.transform = function(name, obj) {
33213324

3325+
OBSOLETE('TransformBuilder', 'Builders.TransformBuilder will be removed in next versions.');
3326+
33223327
var index = 2;
33233328

33243329
if (obj === undefined) {
@@ -3768,6 +3773,34 @@ function $decodeURIComponent(value) {
37683773
}
37693774
};
37703775

3776+
global.NEWOPERATION = function(name, fn) {
3777+
operations[name] = fn;
3778+
operations[name].$owner = F.$owner();
3779+
};
3780+
3781+
global.OPERATION = function(name, model, callback) {
3782+
3783+
if (callback === undefined) {
3784+
callback = model;
3785+
model = EMPTYOBJECT;
3786+
}
3787+
3788+
var fn = operations[name];
3789+
var error = new ErrorBuilder();
3790+
if (fn) {
3791+
fn(error, function(value) {
3792+
if (value instanceof Error) {
3793+
error.push(value);
3794+
value = EMPTYOBJECT;
3795+
}
3796+
callback(error.hasError() ? error : null, value);
3797+
}, model);
3798+
} else {
3799+
error.push('Operation "{0}" not found.'.format(name));
3800+
callback(error, EMPTYOBJECT);
3801+
}
3802+
};
3803+
37713804
// ======================================================
37723805
// EXPORTS
37733806
// ======================================================
@@ -3787,8 +3820,25 @@ global.Page = Page;
37873820
global.UrlBuilder = global.URLBuilder = UrlBuilder;
37883821
global.SchemaBuilder = SchemaBuilder;
37893822

3823+
// Uninstall owners
3824+
exports.uninstall = function(owner) {
3825+
3826+
if (!owner)
3827+
return;
3828+
3829+
Object.keys(operations).forEach(function(key) {
3830+
if (operations[key].$owner === owner)
3831+
delete operations[key];
3832+
});
3833+
3834+
eachschema(function(group, name, schema) {
3835+
schema.owner === owner && schema.destroy();
3836+
});
3837+
};
3838+
37903839
exports.restart = function() {
37913840
schemas = {};
3841+
operations = {};
37923842
Object.keys(transforms).forEach(function(key) {
37933843
if (key.indexOf('_') === -1)
37943844
transforms[key] = {};

changes.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
- added: configuration files supports options for all dependencies `module#mymodulename (Object) : { name: 'A custom options for dependency' }`
1919
- added: `U.chunker()` added a new property `chunker.pages` with count of all stored pages
2020
- added: `U.chunker()` added a new property `chunker.count` with count of all stored items
21+
- added: `NEWOPERATION(name, fn(error, callback(response), value))` - registers a new operation (same as schemas)
22+
- added: `OPERATION('name', function(err, response))` - executes an operation (same as schemas)
2123

2224
- updated: new error message `The field "@" is invalid.`
2325
- updated: `NOSQL().insert(doc, [unique])`
@@ -39,6 +41,7 @@
3941

4042
- removed: behaviours
4143
- removed: restrictions
44+
- removed: `TransformBuilder`
4245
- removed: `F.config['allow-compatibility']` (not used)
4346
- removed: `controller.date()` method has been useless
4447
- removed: dynamic view compilation through `.view()` method

index.js

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -515,7 +515,7 @@ function Framework() {
515515

516516
this.id = null;
517517
this.version = 2400;
518-
this.version_header = '2.4.0-21';
518+
this.version_header = '2.4.0-22';
519519
this.version_node = process.version.toString().replace('v', '').replace(/\./g, '').parseFloat();
520520

521521
this.config = {
@@ -938,7 +938,7 @@ Framework.prototype.script = function(body, value, callback) {
938938
var compilation = value === undefined && callback === undefined;
939939

940940
try {
941-
fn = new Function('next', 'value', 'now', 'var model=value;var global,require,process,GLOBAL,root,clearImmediate,clearInterval,clearTimeout,setImmediate,setInterval,setTimeout,console,$STRING,$VIEWCACHE,framework_internal,TransformBuilder,Pagination,Page,URLBuilder,UrlBuilder,SchemaBuilder,framework_builders,framework_utils,framework_mail,Image,framework_image,framework_nosql,Builders,U,utils,Utils,Mail,WTF,SOURCE,INCLUDE,MODULE,NOSQL,NOBIN,NOCOUNTER,NOSQLMEMORY,NOMEM,DATABASE,DB,CONFIG,INSTALL,UNINSTALL,RESOURCE,TRANSLATOR,LOG,LOGGER,MODEL,GETSCHEMA,CREATE,UID,TRANSFORM,MAKE,SINGLETON,NEWTRANSFORM,NEWSCHEMA,EACHSCHEMA,FUNCTION,ROUTING,SCHEDULE,OBSOLETE,DEBUG,TEST,RELEASE,is_client,is_server,F,framework,Controller,setTimeout2,clearTimeout2,String,Number,Boolean,Object,Function,Date,isomorphic,I,eval;UPTODATE;try{' + body + '}catch(e){next(e)}');
941+
fn = new Function('next', 'value', 'now', 'var model=value;var global,require,process,GLOBAL,root,clearImmediate,clearInterval,clearTimeout,setImmediate,setInterval,setTimeout,console,$STRING,$VIEWCACHE,framework_internal,TransformBuilder,Pagination,Page,URLBuilder,UrlBuilder,SchemaBuilder,framework_builders,framework_utils,framework_mail,Image,framework_image,framework_nosql,Builders,U,utils,Utils,Mail,WTF,SOURCE,INCLUDE,MODULE,NOSQL,NOBIN,NOCOUNTER,NOSQLMEMORY,NOMEM,DATABASE,DB,CONFIG,INSTALL,UNINSTALL,RESOURCE,TRANSLATOR,LOG,LOGGER,MODEL,GETSCHEMA,CREATE,UID,TRANSFORM,MAKE,SINGLETON,NEWTRANSFORM,NEWSCHEMA,EACHSCHEMA,FUNCTION,ROUTING,SCHEDULE,OBSOLETE,DEBUG,TEST,RELEASE,is_client,is_server,F,framework,Controller,setTimeout2,clearTimeout2,String,Number,Boolean,Object,Function,Date,isomorphic,I,eval;UPTODATE,NEWOPERATION,OPERATION;try{' + body + '}catch(e){next(e)}');
942942
} catch(e) {
943943
callback && callback(e);
944944
return compilation ? null : F;
@@ -4038,7 +4038,9 @@ Framework.prototype.$uninstall = function(owner, controller) {
40384038
F.routes.websockets = F.routes.websockets.remove('owner', owner);
40394039
F.routes.cors = F.routes.cors.remove('owner', owner);
40404040
F.schedules = F.schedules.remove('owner', owner);
4041-
F.modificators = F.schedules.remove('$owner', owner);
4041+
F.modificators = F.modificators.remove('$owner', owner);
4042+
4043+
framework_builders.uninstall(owner);
40424044

40434045
var owners = [];
40444046
var redirects = false;
@@ -7280,14 +7282,16 @@ Framework.prototype.mail = function(address, subject, view, model, callback, lan
72807282
callback = tmp;
72817283
}
72827284

7283-
var controller = new Controller('', null, null, null, '');
7285+
var controller = EMPTYCONTROLLER;
72847286
controller.layoutName = '';
72857287
controller.themeName = U.parseTheme(view);
72867288

72877289
if (controller.themeName)
72887290
view = prepare_viewname(view);
72897291
else if (this.onTheme)
72907292
controller.themeName = this.onTheme(controller);
7293+
else
7294+
controller.themeName = '';
72917295

72927296
var replyTo;
72937297

@@ -7332,6 +7336,8 @@ Framework.prototype.view = function(name, model, layout, repository, language) {
73327336
name = prepare_viewname(name);
73337337
} else if (this.onTheme)
73347338
controller.themeName = this.onTheme(controller);
7339+
else
7340+
controller.themeName = '';
73357341

73367342
return controller.view(name, model, true);
73377343
};

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@
7575
"name": "Peter Štolc",
7676
"email": "[email protected]"
7777
}],
78-
"version": "2.4.0-21",
78+
"version": "2.4.0-22",
7979
"homepage": "http://www.totaljs.com",
8080
"bugs": {
8181
"url": "https://github.com/totaljs/framework/issues",

test/test-builders.js

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -304,7 +304,7 @@ function test_Schema() {
304304
});
305305

306306
var qi = q.create();
307-
assert.ok(qi.created.format('yyyyMMddHHmmss') === new Date().format('yyyyMMddHHmmss'), 'A problem with problem a default value of date');
307+
assert.ok(qi.created.format('yyyyMMddHHmmss') === F.datetime.format('yyyyMMddHHmmss'), 'A problem with problem a default value of date');
308308

309309
var xi = x.create();
310310
xi.age = 30;
@@ -608,25 +608,34 @@ function test_ErrorBuilder() {
608608

609609
};
610610

611-
function test_TransformBuilder() {
611+
function test_Operations() {
612612

613-
TransformBuilder.addTransform('xml', function(obj) {
614-
var xml = '';
615-
Object.keys(obj).forEach(function(key) {
616-
xml += '<' + key + '>' + obj[key] + '</' + key + '>';
617-
});
618-
return xml;
619-
}, true);
613+
NEWOPERATION('testA', function(error, callback, value) {
614+
callback(SUCCESS(true, value));
615+
});
616+
617+
NEWOPERATION('testB', function(error, callback, value) {
618+
error.push('bug');
619+
callback();
620+
});
620621

621-
assert.ok(TransformBuilder.transform('xml', { name: 'Peter' }, true) === '<name>Peter</name>', 'TransformBuilder problem');
622-
assert.ok(TransformBuilder.transform({ name: 'Peter' }) === '<name>Peter</name>', 'TransformBuilder problem (default)');
622+
623+
OPERATION('testA', 123456, function(err, response) {
624+
assert.ok(err === null, 'OPERATIONS: errors');
625+
assert.ok(response.success && response.value === 123456, 'OPERATIONS: response');
626+
});
627+
628+
OPERATION('testB', function(err, response) {
629+
assert.ok(err.hasError('bug'), 'OPERATIONS: ErrorHandling 1');
630+
assert.ok(response === undefined, 'OPERATIONS: ErrorHandling 2');
631+
});
623632
}
624633

625634
test_PageBuilder();
626635
test_UrlBuilder();
627636
test_Schema();
628637
test_ErrorBuilder();
629-
test_TransformBuilder();
638+
test_Operations();
630639

631640
console.log('================================================');
632641
console.log('success - OK');

0 commit comments

Comments
 (0)