janus
Version:
the two-faced application library-framework
103 lines (83 loc) • 2.73 kB
JavaScript
// Generated by CoffeeScript 1.12.2
(function() {
var Attribute, TransientAttribute, isFunction,
extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
hasProp = {}.hasOwnProperty,
slice = [].slice;
isFunction = require('../util/util').isFunction;
Attribute = require('./attribute').Attribute;
TransientAttribute = (function(superClass) {
extend(_Class, superClass);
function _Class() {
return _Class.__super__.constructor.apply(this, arguments);
}
_Class.prototype.transient = true;
return _Class;
})(Attribute);
module.exports = {
attribute: function(key, klass) {
return function(schema) {
return schema.attributes[key] = klass;
};
},
bind: function(key, binding) {
return function(schema) {
return schema.bindings[key] = binding;
};
},
validate: function(binding) {
return function(schema) {
return schema.validations.push(binding);
};
},
transient: function(key) {
return function(schema) {
return schema.attributes[key] = TransientAttribute;
};
},
initial: function(key, value, klass) {
if (klass == null) {
klass = Attribute;
}
return function(schema) {
var wrapped;
wrapped = isFunction(value) ? value : (function() {
return value;
});
return schema.attributes[key] = (function(superClass) {
extend(_Class, superClass);
function _Class() {
return _Class.__super__.constructor.apply(this, arguments);
}
_Class.prototype.initial = wrapped;
return _Class;
})(klass);
};
},
Trait: function() {
var parts;
parts = 1 <= arguments.length ? slice.call(arguments, 0) : [];
return function(schema) {
var i, len, part;
for (i = 0, len = parts.length; i < len; i++) {
part = parts[i];
part(schema);
}
};
}
};
module.exports.Trait.build = module.exports.Trait;
module.exports.initial.writing = function(key, value, klass) {
if (klass == null) {
klass = Attribute;
}
return module.exports.initial(key, value, (function(superClass) {
extend(_Class, superClass);
function _Class() {
return _Class.__super__.constructor.apply(this, arguments);
}
_Class.prototype.writeInitial = true;
return _Class;
})(klass));
};
}).call(this);