def new_value( value, encoding = nil )
if value.nil? then return value end
if @class_name and @factory_method then
klass = eval @class_name
converted = klass.__send__(@factory_method, value)
return converted
end
begin
converted = value
case @class_name
when 'String'
converted = value.to_s.dup
if encoding then
converted = Utilities.encode(converted, encoding)
end
when 'Integer'
converted = value.to_i
when 'Float'
converted = value.to_f
when 'BigDecimal'
converted = value.to_s.dup
when 'Date'
unless Date === value then
converted = Date.new(value.year, value.mon, value.mday)
end
when 'Time'
unless Time === value then
converted = Time.new(value.hour, value.min, value.sec)
end
when 'Timestamp'
if String === value then
value = DateTime.parse value
end
unless Timestamp === value then
converted = Timestamp.new(value.year, value.mon, value.mday, \
value.hour, value.min, value.sec)
end
when 'Boolean'
if (value == 1) or (value == true) then
converted = true
elsif (value == 0) or (value == false) then
converted = false
else
converted = nil
end
else
raise ArgumentError, "uninitialized constant #@class_name"
end
value = converted
rescue
raise ArgumentError, "can't cast to #@class_name - #{value.class}:#{value}"
end
value
end