Wrap text
Report abuse
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