Skip to content

Commit 68f2dae

Browse files
committed
Merge branch 'v1.7.2'
Conflicts: helpers/debug.js
2 parents 77e9e74 + ef34da1 commit 68f2dae

26 files changed

Lines changed: 507 additions & 107 deletions

bin/total

Lines changed: 52 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,6 @@ function createFileViews(directory) {
191191
buffer.push('<body>');
192192
buffer.push('');
193193

194-
195194
if ($type === 3)
196195
buffer.push(' <div ng-controller="HomeCtrl">{{ name }}</div>');
197196
else
@@ -289,8 +288,8 @@ function createFileControllerAngular(directory) {
289288
var dir = path.join(directory, 'controllers');
290289
var buffer = [];
291290

292-
buffer.push('exports.install = function(framework) {');
293-
buffer.push(' framework.route(\'/*\', view_app);');
291+
buffer.push('exports.install = function() {');
292+
buffer.push(' F.route(\'/*\', view_app);');
294293
buffer.push('};');
295294
buffer.push('');
296295
buffer.push('function view_app() {');
@@ -306,12 +305,12 @@ function createFileController(directory) {
306305
var dir = path.join(directory, 'controllers');
307306
var buffer = [];
308307

309-
buffer.push('exports.install = function(framework) {');
310-
buffer.push(' framework.route(\'/\', view_index);');
308+
buffer.push('exports.install = function() {');
309+
buffer.push(' F.route(\'/\', view_index);');
311310

312311
if ($type !== 2) {
313312
buffer.push(' // or');
314-
buffer.push(' // framework.route(\'/\');');
313+
buffer.push(' // F.route(\'/\');');
315314
}
316315

317316
buffer.push('};');
@@ -338,12 +337,12 @@ function createFileTest(directory) {
338337
buffer.push("");
339338
buffer.push("exports.run = function() {");
340339
buffer.push("");
341-
buffer.push(" framework.assert('Number validation', function(next, name) {");
340+
buffer.push(" F.assert('Number validation', function(next, name) {");
342341
buffer.push(" assert.ok('1' === '1', name);");
343342
buffer.push(" next();");
344343
buffer.push(" });");
345344
buffer.push("");
346-
buffer.push(" framework.assert('Some controller action', '/some-url-action/', ['xhr', 'json'], function(error, data, code, headers, cookies, name) {");
345+
buffer.push(" F.assert('Some controller action', '/some-url-action/', ['xhr', 'json'], function(error, data, code, headers, cookies, name) {");
347346
buffer.push(" assert.ok(code === 200, name);");
348347
buffer.push(" }, { name: 'total.js (optional)' }, { cookie: 'value (optional)' }, { 'X-My-Header': 'optional' });");
349348
buffer.push("");
@@ -362,14 +361,14 @@ function install(directory) {
362361

363362
function display_help() {
364363
console.log('');
365-
console.log('-m or -minimal = minimal');
366-
console.log('-n or -normal = normal (default)');
367-
console.log('-a or -angular = for angular.js application');
368-
console.log('-t or -translate = creates a resource file with the localized text from views');
369-
console.log('-t or -translate TEXT = creates an identificator for the resource');
370-
console.log('-d or -diff = creates a differents between two resources "-diff filename1 filename2"');
371-
console.log('-v or -version = total.js version');
372-
console.log('/path/ = target (default current directory)');
364+
console.log('-m or -minimal = minimal');
365+
console.log('-n or -normal = normal (default)');
366+
console.log('-a or -angular = for angular.js application');
367+
console.log('-t or -translate = creates a resource file with the localized text from views');
368+
console.log('-t or -translate "TEXT" = creates an identificator for the resource');
369+
console.log('-d or -diff = creates a differents between two resources "-diff filename1 filename2"');
370+
console.log('-v or -version = total.js version');
371+
console.log('/path/ = target (default current directory)');
373372
console.log('');
374373
}
375374

@@ -424,15 +423,31 @@ function diff(a, b) {
424423
return '';
425424
}
426425

426+
var comment = '';
427+
var prev = '';
428+
427429
for (var i = 0, length = ka.length; i < length; i++) {
428430
var key = ka[i];
429431

430432
if (cb[key] !== undefined)
431433
continue;
432434

433-
items.push(find_comment(ba, key));
435+
comment = find_comment(ba, key);
436+
437+
if (comment) {
438+
if (items[items.length - 1] !== '')
439+
items.push('');
440+
items.push(comment);
441+
}
442+
443+
var empty = comment === prev;
444+
445+
prev = comment;
434446
items.push(key.padRight(padding) + ': ' + ca[key]);
435-
items.push('');
447+
448+
if (!empty)
449+
items.push('');
450+
436451
add++;
437452
}
438453

@@ -452,9 +467,24 @@ function diff(a, b) {
452467
if (ca[key] !== undefined)
453468
continue;
454469

455-
items.push(find_comment(bb, key));
470+
comment = find_comment(bb, key);
471+
472+
if (comment) {
473+
if (items[items.length - 1] !== '')
474+
items.push('');
475+
items.push(comment);
476+
}
477+
else if (prev !== '')
478+
items.push('');
479+
480+
var empty = comment === prev;
481+
482+
prev = comment;
456483
items.push(key.padRight(padding) + ': ' + cb[key]);
457-
items.push('');
484+
485+
if (!empty)
486+
items.push('');
487+
458488
rem++;
459489
}
460490

@@ -538,7 +568,7 @@ function main() {
538568
if ($type === 4) {
539569

540570
if (isDirectory) {
541-
console.log(dir.hash().padRight(17, ' ') + ': ' + dir);
571+
console.log('T' + dir.hash().padRight(17, ' ') + ': ' + dir);
542572
return;
543573
}
544574

@@ -572,6 +602,7 @@ function main() {
572602
}
573603
else
574604
resource[key] = file;
605+
575606
count++;
576607
max = Math.max(max, key.length);
577608
command = Internal.parseLocalization(content, command.end);

builders.js

Lines changed: 134 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/**
22
* @module FrameworkBuilders
3-
* @version 1.7.0
3+
* @version 1.7.2
44
*/
55

66
'use strict';
@@ -92,7 +92,9 @@ function SchemaBuilderEntity(parent, name, obj, validator, properties) {
9292
this.properties = properties === undefined ? Object.keys(obj) : properties;
9393
this.transforms;
9494
this.composes;
95+
this.operations;
9596
this.rules;
97+
this.constants;
9698
this.onDefault;
9799
this.onValidation = validator;
98100
this.onSave;
@@ -118,6 +120,9 @@ SchemaBuilderEntity.prototype.define = function(name, type, required, primary) {
118120
return self;
119121
}
120122

123+
if (type instanceof SchemaBuilderEntity)
124+
type = type.name;
125+
121126
if (primary)
122127
self.primary = primary;
123128
self.schema[name] = type;
@@ -232,7 +237,7 @@ SchemaBuilderEntity.prototype.setQuery = function(fn) {
232237

233238
/**
234239
* Set remove handler
235-
* @param {Function(error, model, helper, next(value))} fn
240+
* @param {Function(error, helper, next(value))} fn
236241
* @return {SchemaBuilderEntity}
237242
*/
238243
SchemaBuilderEntity.prototype.setRemove = function(fn) {
@@ -273,6 +278,25 @@ SchemaBuilderEntity.prototype.addRule = function(name, value) {
273278
return self;
274279
};
275280

281+
/**
282+
* Add a new constant for the schema
283+
* @param {String} name Constant name, optional.
284+
* @param {Object} value
285+
* @return {SchemaBuilderEntity}
286+
*/
287+
SchemaBuilderEntity.prototype.constant = function(name, value) {
288+
var self = this;
289+
290+
if (value === undefined)
291+
return self.constants ? self.constants[name] : undefined;
292+
293+
if (!self.constants)
294+
self.constants = {};
295+
296+
self.constants[name] = value;
297+
return self;
298+
};
299+
276300
/**
277301
* Add a new transformation for the entity
278302
* @param {String} name Transform name, optional.
@@ -294,6 +318,27 @@ SchemaBuilderEntity.prototype.addTransform = function(name, fn) {
294318
return self;
295319
};
296320

321+
/**
322+
* Add a new operation for the entity
323+
* @param {String} name Operation name, optional.
324+
* @param {Function(errorBuilder, [model], helper, next([output]), entityName)} fn
325+
* @return {SchemaBuilderEntity}
326+
*/
327+
SchemaBuilderEntity.prototype.addOperation = function(name, fn) {
328+
var self = this;
329+
330+
if (typeof(name) === FUNCTION) {
331+
fn = name;
332+
name = 'default';
333+
}
334+
335+
if (!self.operations)
336+
self.operations = {};
337+
338+
self.operations[name] = fn;
339+
return self;
340+
};
341+
297342
/**
298343
* Add a new workflow for the entity
299344
* @param {String} name Workflow name, optional.
@@ -689,6 +734,30 @@ SchemaBuilderEntity.prototype.$make = function(obj) {
689734
return obj;
690735
};
691736

737+
obj.$operation = function(name, helper, callback) {
738+
739+
if (!obj.$$async) {
740+
self.operation(name, obj, helper, callback);
741+
return obj;
742+
}
743+
744+
obj.$$async.push(function(next) {
745+
self.operation(name, obj, helper, function(err, result) {
746+
747+
if (obj.$$result)
748+
obj.$$result.push(err ? null : result);
749+
750+
if (!err)
751+
return next();
752+
obj.$$async = null;
753+
next = null;
754+
obj.$callback(err, obj.$$result);
755+
});
756+
});
757+
758+
return obj;
759+
};
760+
692761
obj.$clean = function() {
693762
return self.clean(obj);
694763
};
@@ -713,6 +782,10 @@ SchemaBuilderEntity.prototype.$make = function(obj) {
713782
return self.rule(name);
714783
};
715784

785+
obj.$constant = function(name) {
786+
return self.constant(name);
787+
};
788+
716789
return obj;
717790
};
718791

@@ -1327,6 +1400,61 @@ SchemaBuilderEntity.prototype.workflow = function(name, model, helper, callback)
13271400
return self;
13281401
};
13291402

1403+
/**
1404+
* Run an operation
1405+
* @param {String} name
1406+
* @param {Object} model A model object, optional, priority: 2.
1407+
* @param {Object} helper A helper object, optional, priority: 1.
1408+
* @param {Function(errorBuilder, output)} callback
1409+
* @return {SchemaBuilderEntity}
1410+
*/
1411+
SchemaBuilderEntity.prototype.operation = function(name, model, helper, callback) {
1412+
1413+
var self = this;
1414+
1415+
var tm = typeof(model);
1416+
var th = typeof(helper);
1417+
var tc = typeof(callback);
1418+
1419+
if (tc === UNDEFINED) {
1420+
if (th === FUNCTION) {
1421+
callback = helper;
1422+
helper = model;
1423+
model = undefined;
1424+
} else if (th === UNDEFINED) {
1425+
helper = model;
1426+
model = undefined;
1427+
}
1428+
} else if (th === UNDEFINED) {
1429+
helper = model;
1430+
model = undefined;
1431+
}
1432+
1433+
if (typeof(helper) === FUNCTION) {
1434+
callback = helper;
1435+
helper = undefined;
1436+
}
1437+
1438+
if (typeof(callback) !== 'function')
1439+
callback = undefined;
1440+
1441+
var operation = self.operations ? self.operations[name] : undefined;
1442+
1443+
if (!operation) {
1444+
callback(new ErrorBuilder().add('', 'Operation not found.'));
1445+
return;
1446+
}
1447+
1448+
var builder = new ErrorBuilder();
1449+
1450+
operation.call(self, builder, model, helper, function(result) {
1451+
if (callback)
1452+
callback(builder.hasError() ? builder : null, result);
1453+
}, self.name);
1454+
1455+
return self;
1456+
};
1457+
13301458
/**
13311459
* Clean model (remove state of all schemas in model).
13321460
* @param {Object} model
@@ -1354,6 +1482,7 @@ SchemaBuilderEntity.prototype.clean = function(m, isCopied) {
13541482
delete model['$callback'];
13551483
delete model['$transform'];
13561484
delete model['$workflow'];
1485+
delete model['$operation'];
13571486
delete model['$destroy'];
13581487
delete model['$save'];
13591488
delete model['$remove'];
@@ -1364,6 +1493,7 @@ SchemaBuilderEntity.prototype.clean = function(m, isCopied) {
13641493
delete model['$validate'];
13651494
delete model['$compose'];
13661495
delete model['$rule'];
1496+
delete model['$constant'];
13671497

13681498
var keys = Object.keys(model);
13691499

@@ -1414,6 +1544,7 @@ function ErrorBuilder(onResource) {
14141544
this.onResource = onResource;
14151545
this.resourceName = framework.config['default-errorbuilder-resource-name'] || 'default';
14161546
this.resourcePrefix = framework.config['default-errorbuilder-resource-prefix'] || '';
1547+
this.isResourceCustom = false;
14171548
this.count = 0;
14181549
this.replacer = [];
14191550
this.isPrepared = false;
@@ -1700,6 +1831,7 @@ ErrorBuilder.prototype = {
17001831
*/
17011832
ErrorBuilder.prototype.resource = function(name, prefix) {
17021833
var self = this;
1834+
self.isResourceCustom = true;
17031835
self.resourceName = name || 'default';
17041836
self.resourcePrefix = prefix || '';
17051837
return self._resource();

0 commit comments

Comments
 (0)