Skip to content

Commit 435578a

Browse files
samsam
authored andcommitted
enabled functions
1 parent 7474716 commit 435578a

File tree

6 files changed

+96
-77
lines changed

6 files changed

+96
-77
lines changed

lib/errorable.js

Lines changed: 35 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,41 @@
11
var DEFAULT_LOCALE = 'zh-CN';
22

3+
var makeAnError = require('./makeAnError');
4+
35
function Errorable(options) {
4-
Error.call(this);
6+
this.constructor.prototype = Error.prototype;
7+
Error.captureStackTrace(this, this.constructor);
8+
9+
this.restify = function(locale) {
10+
return {
11+
code: this.code,
12+
name: this.name,
13+
message: this.getMessage(locale)
14+
};
15+
};
16+
17+
this.toString = function(locale) {
18+
return String('[' + this.name + '] => {message: ' + this.getMessage(locale) + '}');
19+
};
20+
21+
this.getMessage = function(locale) {
22+
return (this.prefix ? this.prefix + ':' : '') + this.messages[locale || this.locale];
23+
};
24+
25+
this.localize = function(locale, clone) {
26+
clone = clone || false;
27+
if (!clone) {
28+
this.message = this.getMessage(locale);
29+
return this;
30+
}
31+
return makeAnError({
32+
locale: this.locale,
33+
name: this.name,
34+
code: this.code,
35+
prefix: this.prefix,
36+
messages: this.messages
37+
});
38+
};
539
this.locale = options.locale || DEFAULT_LOCALE;
640
this.name = options.name || '';
741
this.code = options.code !== undefined ? options.code : this.name;
@@ -10,36 +44,4 @@ function Errorable(options) {
1044
this.message = this.getMessage();
1145
}
1246

13-
Errorable.prototype.restify = function (locale) {
14-
return {
15-
code: this.code,
16-
name: this.name,
17-
message: this.getMessage(locale)
18-
};
19-
};
20-
21-
Errorable.prototype.toString = function (locale) {
22-
return String('[' + this.name + '] => {message: ' + this.getMessage(locale) + '}');
23-
};
24-
25-
Errorable.prototype.getMessage = function (locale) {
26-
return (this.prefix ? this. prefix + ':' : '') + this.messages[locale || this.locale];
27-
};
28-
29-
Errorable.prototype.localize = function (locale, clone) {
30-
clone = clone || false;
31-
if (!clone) {
32-
this.message = this.getMessage(locale);
33-
return this;
34-
}
35-
var error = new Errorable({
36-
locale: this.locale,
37-
name: this.name,
38-
code: this.code,
39-
prefix: this.prefix,
40-
messages: this.messages
41-
});
42-
return error;
43-
};
44-
4547
module.exports = Errorable;

lib/generator.js

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,35 @@
11
import fs from 'fs';
2-
var Errorable = require('./errorable');
2+
3+
var makeAnError = require('./makeAnError');
34

45
function Generator(options, locale, upperCase) {
56
var json = {};
6-
if(typeof upperCase === 'boolean' && upperCase) {
7+
if (typeof upperCase === 'boolean' && upperCase) {
78
upperCase = true;
8-
}else {
9+
} else {
910
upperCase = false;
1011
}
1112
this.errors = {};
13+
this.functions = {};
1214
this.json = json;
1315
this.upperCase = upperCase;
1416
this._generate(json, options, locale);
1517
}
1618
Generator.prototype.capitalize = function(str, upperCase) {
17-
if(!upperCase) {
19+
if (!upperCase) {
1820
return str[0].toUpperCase() + str.substring(1).toLowerCase();
1921
}
2022
return str.toUpperCase();
2123
};
2224

2325
Generator.prototype.getName = function(name, k, upperCase) {
2426
name = name || '';
25-
if(!upperCase) {
27+
if (!upperCase) {
2628
return name + this.capitalize(k);
2729
} else {
28-
if(name && name !== '') {
30+
if (name && name !== '') {
2931
return name + '_' + this.capitalize(k, upperCase);
30-
}else {
32+
} else {
3133
return name + this.capitalize(k, upperCase);
3234
}
3335
}
@@ -46,12 +48,15 @@ Generator.prototype._generate = function(savor, data, locale, name) {
4648
if (data.code !== undefined) {
4749
savor[name].code = data.code;
4850
}
49-
this.errors[name] = new Errorable({
51+
52+
this.functions[name] = makeAnError({
5053
name: name,
5154
messages: data.messages,
5255
code: data.code,
5356
locale: locale
5457
});
58+
59+
this.errors[name] = new this.functions[name]();
5560
}
5661
if (typeof data !== 'object') {
5762
throw Error('Parse JSON Error, Please check you Json Format at : ' + JSON.stringify(data));

lib/makeAnError.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
module.exports = function(data) {
2+
var temp = {};
3+
/* eslint no-unused-vars: 0 */
4+
var func = (function(obj, innerData) {
5+
var str = '(function() {var Errorable = require(\'./errorable\'); function ' +
6+
data.name + '() { Errorable.call(this, innerData); } obj.func = ' + data.name + ';})();';
7+
8+
/* eslint no-eval: 0 */
9+
eval(str);
10+
})(temp, data);
11+
return temp.func;
12+
};

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "errorable",
3-
"version": "0.2.1",
3+
"version": "0.3.0",
44
"description": "General javascript errors generator and definition",
55
"homepage": "",
66
"author": {

test/errorable.js

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,5 @@ describe('Errorable', function() {
2929

3030
var string = error.toString();
3131
assert.equal(true, string === String('[' + options.name + '] => {message: ' + message + '}'));
32-
33-
var options2 = {
34-
code: 0
35-
};
36-
var error2 = new Errorable(options2);
37-
assert.equal(true, error2.locale === 'zh-CN');
38-
assert.equal(true, error2.code === 0);
3932
});
4033
});

test/generator.js

Lines changed: 35 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -28,40 +28,49 @@ var json = {
2828
describe('Generator', function() {
2929
it('Should generate errors', function() {
3030
var generator = new Generator(json, 'zh-CN');
31-
assert.equal(true, generator.errors !== undefined);
32-
assert.equal(true, generator.errors.ILoveYou !== undefined);
33-
assert.equal(true, generator.errors.ILoveYou.name === 'ILoveYou');
34-
assert.equal(true, generator.errors.ILoveYou.message === '我爱你!');
31+
var errors = generator.errors;
32+
var functions = generator.functions;
33+
34+
assert.equal(true, errors !== undefined);
35+
assert.equal(true, errors.ILoveYou !== undefined);
36+
37+
// assert.equal(true, errors.ILoveYou instanceof functions.ILoveYou);
38+
assert.equal(true, errors.ILoveYou.name === 'ILoveYou');
39+
assert.equal(true, errors.ILoveYou.message === '我爱你!');
3540
generator.save('./lib/data/errors.json');
3641
generator = new Generator(json, 'en-US');
37-
assert.equal(true, generator.errors !== undefined);
38-
assert.equal(true, generator.errors.ILoveYou !== undefined);
39-
assert.equal(true, generator.errors.ILoveYou.name === 'ILoveYou');
40-
assert.equal(true, generator.errors.ILoveYou.message === 'I Love U!');
42+
errors = generator.errors;
43+
functions = generator.functions;
44+
45+
assert.equal(true, errors !== undefined);
46+
assert.equal(true, errors.ILoveYou !== undefined);
47+
assert.equal(true, errors.ILoveYou.name === 'ILoveYou');
48+
assert.equal(true, errors.ILoveYou.message === 'I Love U!');
4149

42-
var localized = generator.errors.ILoveYou.localize('zh-CN');
50+
var localized = errors.ILoveYou.localize('zh-CN');
4351
assert.equal(true, localized.message === '我爱你!');
44-
assert.deepEqual(generator.errors.ILoveYou, localized);
45-
var cloned = generator.errors.ILoveYou.localize('zh-CN', true);
46-
assert.notDeepEqual(generator.errors.ILoveYou, cloned);
52+
assert.deepEqual(errors.ILoveYou, localized);
53+
var cloned = errors.ILoveYou.localize('zh-CN', true);
54+
assert.notDeepEqual(errors.ILoveYou, cloned);
4755

4856
generator = new Generator(json, 'zh-CN', true);
49-
assert.equal(true, generator.errors !== undefined);
50-
assert.equal(true, generator.errors.I_LOVE_YOU !== undefined);
51-
assert.equal(true, generator.errors.I_LOVE_YOU.name === 'I_LOVE_YOU');
52-
assert.equal(true, generator.errors.I_LOVE_YOU.message === '我爱你!');
57+
errors = generator.errors;
58+
assert.equal(true, errors !== undefined);
59+
assert.equal(true, errors.I_LOVE_YOU !== undefined);
60+
assert.equal(true, errors.I_LOVE_YOU.name === 'I_LOVE_YOU');
61+
assert.equal(true, errors.I_LOVE_YOU.message === '我爱你!');
5362
generator = new Generator(json, 'en-US', true);
54-
assert.equal(true, generator.errors !== undefined);
55-
assert.equal(true, generator.errors.I_LOVE_YOU !== undefined);
56-
assert.equal(true, generator.errors.I_LOVE_YOU.name === 'I_LOVE_YOU');
57-
assert.equal(true, generator.errors.I_LOVE_YOU.message === 'I Love U!');
63+
errors = generator.errors;
64+
assert.equal(true, errors !== undefined);
65+
assert.equal(true, errors.I_LOVE_YOU !== undefined);
66+
assert.equal(true, errors.I_LOVE_YOU.name === 'I_LOVE_YOU');
67+
assert.equal(true, errors.I_LOVE_YOU.message === 'I Love U!');
5868

59-
localized = generator.errors.I_LOVE_YOU.localize('zh-CN');
69+
localized = errors.I_LOVE_YOU.localize('zh-CN');
6070
assert.equal(true, localized.message === '我爱你!');
61-
assert.deepEqual(generator.errors.I_LOVE_YOU, localized);
62-
cloned = generator.errors.I_LOVE_YOU.localize('zh-CN', true);
63-
assert.notDeepEqual(generator.errors.I_LOVE_YOU, cloned);
64-
71+
assert.deepEqual(errors.I_LOVE_YOU, localized);
72+
cloned = errors.I_LOVE_YOU.localize('zh-CN', true);
73+
assert.notDeepEqual(errors.I_LOVE_YOU, cloned);
6574

6675
var error = {
6776
History: {
@@ -85,15 +94,13 @@ describe('Generator', function() {
8594
});
8695

8796
describe('get', function() {
88-
8997
var errors = errorable.get(json);
9098
assert.equal(true, errors !== undefined);
91-
assert.equal(true, errors.ILoveYou instanceof Errorable);
99+
92100
assert.equal(true, errors.ILoveYou.name === 'ILoveYou');
93101
assert.equal(true, errors.ILoveYou.message === '我爱你!');
94102
errors = errorable.get(json, 'en-US');
95103
assert.equal(true, errors !== undefined);
96-
assert.equal(true, errors.ILoveYou instanceof Errorable);
97104
assert.equal(true, errors.ILoveYou.name === 'ILoveYou');
98105
assert.equal(true, errors.ILoveYou.message === 'I Love U!');
99106
errors = errorable.get(json, 'en-US', true);

0 commit comments

Comments
 (0)