require 'rubygems'
require 'sequel/sqlite'

require 'pp'
require 'yaml'

module Sequel
class Model
def self.serialize *fields
@@serialized_fields = fields

@@serialized_fields.each { |f|
define_method f, &eval("proc { YAML.load @values[:%s] }" % f.to_s)
define_method "#{f.to_s}=", &eval("proc { |v| @values[:%s] = v.to_yaml }" % f.to_s)
}

before_create {
@@serialized_fields.each { |f|
self[f] = self[f].to_yaml
}
}
end
end
end

DB = Sequel.sqlite

class SerializedData < Sequel::Model(:data)
set_schema do
primary_key :id
text :array
text :hash
end

serialize :array, :hash
end

SerializedData.create_table

SerializedData.create :array => [1,2,3], :hash => { :a=>1, :b=>2 }
SerializedData.create :hash => { :a=>1, :b=>2 }
SerializedData.create :array => [1,2,3]


pp DB[:data].select(:array,:hash).where(:id => 1).first

r = SerializedData[1]
pp r.array
pp r.hash

r.array = [4,5,6,7]
pp r.array
r.save

pp DB[:data].select(:array,:hash).where(:id => 1).first