Dm-types i hash

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ś?

Eeee… Straciłem zaufanie do tego forum, skoro nikt nie zauważył, że typecast jest definiowany wewnątrz dump w taki sposób, że tak naprawdę definiowany nigdy nie był :smiley:

Poza tym dump powinien zwracać nil, a nie pustego stringa. Można zamknąć :wink:

Widocznie wszyscy użytkownicy DataMappera z tego forum – tzn. obaj :wink: – wyjechali na długi weekend :wink: