Page MenuHomeSealhub

field-type.js
No OneTemporary

field-type.js

var Promise = require("bluebird");
var ChipManager = require.main.require("lib/chip-types/chip-manager.js");
var Errors = require.main.require("lib/response/error.js");
var default_methods = require("./field-type-default-methods.js");
var methods_with_accept_reject_interface = new Set(["is_proper_value"]);
function wrap_method_in_accept_reject (declaration, method_name) {
return function(){
var that = this;
var arguments_array = Object.keys(arguments).map((key)=>arguments[key]);
return new Promise(function(resolve, reject){
var accept = resolve;
var new_reject = function(error){
if (typeof error === "string"){
reject(new Errors.ValidationError(error));
} else {
reject(error);
}
};
arguments_array.unshift(accept, new_reject);
declaration[method_name].apply(this, arguments_array);
});
};
}
function wrap_method_in_promise (declaration, method_name) {
return function(){
return Promise.resolve(declaration[method_name].apply(this, arguments));
};
}
var FieldType = function(declaration){
var self;
if (declaration instanceof FieldType){
return declaration;
} else if (typeof declaration === "string"){
return ChipManager.get_chip("field_type", declaration);
} else if (declaration.extends){
var parent_field_type = ChipManager.get_chip("field_type", declaration.extends);
self = Object.create(parent_field_type);
} else {
self = this;
for (var method_name in default_methods){
self[method_name] = default_methods[method_name];
}
}
if (declaration.name){
ChipManager.add_chip("field_type", declaration.name, self);
}
for (var prop_name in declaration){
if (default_methods[prop_name] !== undefined){
if (methods_with_accept_reject_interface.has(prop_name)){
self[prop_name] = wrap_method_in_accept_reject(declaration, prop_name);
} else {
self[prop_name] = wrap_method_in_promise(declaration, prop_name);
}
} else {
self[prop_name] = declaration[prop_name];
}
}
return self;
};
module.exports = FieldType;

File Metadata

Mime Type
text/plain
Expires
Fri, Nov 28, 15:13 (18 h, 58 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
1083823
Default Alt Text
field-type.js (1 KB)

Event Timeline