module TopModel::Marshal

Public Instance Methods

dump() click to toggle source
# File lib/topmodel/marshal.rb, line 40
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)
      tmp_file.close
  # Atomic serialization - so we never corrupt the db
  FileUtils.mv(tmp_file.path, path)
  true
end
klasses() click to toggle source
# File lib/topmodel/marshal.rb, line 14
def klasses
  @klasses ||= []
end
load() click to toggle source
# File lib/topmodel/marshal.rb, line 18
def load
  return unless path
  return unless File.exist?(path)
  data = []
  File.open(path, "rb") do |file|
    begin
      data = ::Marshal.load(file)
    rescue => e
      if defined?(Bowline)
        Bowline::Logging.log_error(e)
      end
      # 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
path() click to toggle source
# File lib/topmodel/marshal.rb, line 6
def path
  @path || raise("Provide a path")
end
path=(p) click to toggle source
# File lib/topmodel/marshal.rb, line 10
def path=(p)
  @path = p
end