Joose.Managed.Property.Attribute = new Joose.Proto.Class('Joose.Managed.Property.Attribute', {
isa : Joose.Managed.Property,
slot : null,
initialize : function () {
Joose.Managed.Property.Attribute.superClass.initialize.apply(this, arguments)
this.slot = this.name
},
apply : function (target) {
target.prototype[ this.slot ] = this.value
},
isAppliedTo : function (target) {
return target.prototype[ this.slot ] == this.value
},
unapply : function (from) {
if (!this.isAppliedTo(from)) throw "Unapply of property [" + this.name + "] from [" + from + "] failed"
delete from.prototype[this.slot]
},
clearValue : function (instance) {
delete instance[ this.slot ]
},
hasValue : function (instance) {
return instance.hasOwnProperty(this.slot)
},
getRawValueFrom : function (instance) {
return instance[ this.slot ]
},
setRawValueTo : function (instance, value) {
instance[ this.slot ] = value
}
}).c