Sha256: a223271ebc2badcf795287ae44b08ba7a7def7042d36c306bf04ef950dde2d4e
Contents?: true
Size: 1.91 KB
Versions: 4
Compression:
Stored size: 1.91 KB
Contents
require 'fileutils' require 'facet/kernel/constant' require 'facet/kernel/assign_with' # $DBG = true module Og class Manager # Dump Og managed objects to the filesystem. def dump(options = {}) classes = options[:classes] || options[:class] || manageable_classes basedir = options[:basedir] || 'ogdump' FileUtils.makedirs(basedir) for c in [ classes ].flatten Logger.info "Dumping class '#{c}'" all = c.all.map { |obj| obj.properties_to_hash } File.open("#{basedir}/#{c}.yml", 'w') { |f| f << all.to_yaml } end end alias_method :export, :dump # Load Og managed objects from the filesystem. This method can apply # optional transformation rules in order to evolve a schema. def load(options = {}) classes = options[:classes] || manageable_classes basedir = options[:basedir] || 'ogdump' rules = options[:rules] || rules[:evolution] || {} classes.each { |c| c.destroy if managed?(c) } unmanage_classes(classes) manage_classes for f in Dir["#{basedir}/*.yml"] all = YAML.load(File.read(f)) unless all.empty? klass = f.split(/\/|\./)[1] Logger.info "Loading class '#{klass}'" if krules = rules[klass.to_sym] if krules[:self] # Class name changed. Logger.info "Renaming class '#{klass}' to '#{krules[:self]}'" klass = krules[:self] end Logger.info "Evolution transformation will be applied!" end klass = constant(klass) for h in all obj = klass.allocate obj.assign_with(h) if krules krules.each do |old, new| obj.instance_variable_set "@#{new}", h[old] end end obj.insert end end end end alias_method :import, :load alias_method :evolve, :load end end
Version data entries
4 entries across 4 versions & 1 rubygems
Version | Path |
---|---|
og-0.29.0 | lib/og/evolution.rb |
og-0.28.0 | lib/og/evolution.rb |
og-0.30.0 | lib/og/evolution.rb |
og-0.31.0 | lib/og/evolution.rb |