Sha256: f9217bb2f55c42e88fce2152a8145e338efc7f880b83848a2b474250839e167b
Contents?: true
Size: 1.53 KB
Versions: 1
Compression:
Stored size: 1.53 KB
Contents
require "tempfile" require "fileutils" module SuperModel module Marshal def path @path || raise("Provide a path") end def path=(p) @path = p end def klasses @klasses ||= [] end def load return unless path return unless File.exist?(path) data = [] File.open(path, "rb") do |file| begin data = ::Marshal.load(file) rescue # Lots of errors can occur during # marshaling - such as EOF etc return false end end data.each do |klass, records| klass.marshal_records(records) end true end def dump return unless path tmp_file = Tempfile.new("rbdump") tmp_file.binmode data = klasses.inject({}) {|hash, klass| hash[klass] = klass.marshal_records hash } ::Marshal.dump(data, tmp_file) # Atomic serialization - so we never corrupt the db FileUtils.mv(tmp_file.path, path) true end extend self module Model def self.included(base) base.extend ClassMethods Marshal.klasses << base end def marshal_dump serializable_hash end def marshal_load(atts) # Can't call load, since class # isn't setup properly @attributes = atts end module ClassMethods def marshal_records(records = nil) @records = records if records @records end end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
supermodel-0.1.2 | lib/supermodel/marshal.rb |