def self.add_prop(target, prop)
if idx = target.__props.index(prop)
target.__props[idx] = prop
else
target.__props << prop
end
s, klass = prop.symbol, prop.klass
if prop.meta[:reader]
target.module_eval %{
def #{s}
return @#{s}
end
}
end
if prop.meta[:writer]
target.module_eval %{
#{prop_setter(prop)}
def __force_#{s}(val)
self.#{s}=(} + case klass.name
when Fixnum.name
"val.to_i()"
when String.name
"val.to_s()"
when Float.name
"val.to_f()"
when Time.name
"Time.parse(val.to_s())"
when TrueClass.name, FalseClass.name
"val.to_i() > 0"
else
"val"
end + %{)
end
}
end
end