Witam. Mam problem z definiowaniem własnych typów w DataMapperze. Chcę osiągnąć hasha, który w bazie byłby w stringiem w postaci zserializowanej typu na przykład key1:value1;key2:value2;key3:value3
, a w aplikacji zachowywałby się jak normalny Hash.
Korzystając z tego i tego, wyprodukowałem następujący kod:
[code=“ruby”]module DataMapper
module Types
class SHash < DataMapper::Type
primitive String
lazy true
def self.load(value, property)
sh = Hash.new
value.split(';').each do |e|
key, val = e.split(':')
sh[key] = val
end
return sh
end
def self.dump(value, property)
if value.is_a?(Hash)
dmp = []
value.each {|key,val| dmp << "#{key}:#{val}"}
return dmp.join(';')
else
return ""
end
def self.typecast(value, property)
if value.kind_of?(Hash)
value
else
load(value, property)
end
end
end
end
end
end[/code]
Niestety to nie działa. Trochę już przy tym grzebałem, generalnie typecast tak jakby otrzymywał Nila, a dump Stringa, zamiast Hasha. Nie bardzo wiem czemu, a dokumentacja niewiele mi wyjaśnia. Ktoś się bawił czymś podobnym kiedyś?