YAML persistence
Fixed up my persistence code to not have to specify variables as an array, and committed my changes to CVS. Funny that on the day I got developer access to clxmlserial, I switched it out of my project in favour of YAML. Of course, I need to add a persistent attribute to that also, but it works a little different from XML:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
class Object def self._persist klass begin @@persist rescue @@persist = {} end @@persist[klass] = [] if !@@persist[klass] @@persist[klass] end def self._persist_with_parent klass begin @@persist rescue @@persist = {} end p = nil while (!p) && klass p = @@persist[klass.to_s] klass = klass.superclass end p end def self.persistent *var p = self._persist(self.to_s) for i in (0..var.length-1) var[i] = var[i].to_s end p.concat(var) end def to_yaml ( opts = {} ) p = self.class._persist_with_parent(self.class) if p.size > 0 YAML::quick_emit( object_id, opts ) do |out| out.map( taguri, to_yaml_style ) do |map| p.each do |m| map.add( m, instance_variable_get( '@' + m ) ) end end end else YAML::quick_emit( object_id, opts ) do |out| out.map( taguri, to_yaml_style ) do |map| to_yaml_properties.each do |m| map.add( m[1..-1], instance_variable_get( m ) ) end end end end end def save(filename) File.open( filename + '.yaml', 'w' ) do |out| YAML.dump( self, out ) end end end |