Pastie now auto-senses if line-wrap is a bad or good idea. Feedback?
## mark a section (Learn more)
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
This paste will be private.
From the Design Piracy series on my blog: