class Loader

This utility program loads a yaml file to a database

Constants

DATABASES
VERSION

Attributes

opts[RW]

Public Class Methods

new() click to toggle source
# File dbload.rb, line 37
def initialize
  @opts = get_options
  case @opts.dbtype
  when :dbm
    require 'dbm'
  when :gdbm
    require 'gdbm'
  when :sdbm
    require 'sdbm'
  when :sqlite
    require 'sqlite'
    require 'storage/sqlitehash'
  when :sqlite3
    require 'sqlite3'
    require 'storage/sqlite3hash'
  end
  @dbtop = 0
  @db = {}
  @count = 0
end

Public Instance Methods

get_options() click to toggle source

Processes command line arguments

# File dbload.rb, line 61
def get_options

  # The myopts specified on the command line will be collected in *myopts*.

  # We set default values here.

  myopts = OpenStruct.new
  myopts.ifile = nil
  myopts.ofile = nil
  myopts.dbtype = nil

  opts = OptionParser.new do |opts|
    opts.banner = "Database Loader #{VERSION}"
    opts.separator ""
    opts.separator "Usage: ruby #{$0} [options]"
    opts.separator ""
    opts.separator "Options:"
    opts.on("-i", "--ifile FILE", String,
            "Select the yaml file to read",
            "  defaults to same as database") {|myopts.ifile|}
    opts.on("-o", "--ofile FILE", String,
            "Select the database file to write",
            "  extension determined automatically") {|myopts.ofile|}
    opts.on("-t", "--type DBTYPE", DATABASES,
            "Select the database type - required (no default)",
            "  One of: #{DATABASES.join(", ")}",
            "    Example: -t gdbm") {|myopts.dbtype|}
    opts.on_tail("-h", "--help", "Show this message") do
      puts opts.help
      exit
    end
    opts.on_tail("-v", "--version", "Show version") do
      puts "Database Loader #{VERSION}"
      exit
    end
  end

  opts.parse!(ARGV)
  raise(OptionParser::MissingArgument.new("-t")) if myopts.dbtype == nil
  raise(OptionParser::ParseError, "Must specify input file!") if myopts.ifile.nil?
  myopts.ofile = myopts.ifile.dup if myopts.ofile.nil?
  myopts.ofile << ".gdbm" if myopts.dbtype == :gdbm
  myopts.ofile << ".sqlite" if myopts.dbtype == :sqlite
  myopts.ofile << ".sqlite3" if myopts.dbtype == :sqlite3
  myopts.ifile << ".yaml"

  return myopts
rescue OptionParser::ParseError
  puts "ERROR - #{$!}"
  puts "For help..."
  puts " ruby #{$0} --help"
  exit
end
run() click to toggle source

Launches the loader

# File dbload.rb, line 116
def run

  YAML::load_file(@opts.ifile).each do |o|
    @dbtop = o.id if o.id > @dbtop
    @db[o.id]=o
    @count += 1
  end

  case @opts.dbtype
  when :sdbm
    SDBM.open(@opts.ofile, 0666) do |db|
      @db.each {|k,v| db[k.to_s] = Utility.encode(v)}
    end
  when :gdbm
    GDBM.open(@opts.ofile, 0666) do |db|
      @db.each {|k,v| db[k.to_s] = Utility.encode(v)}
    end
  when :dbm
    DBM.open(@opts.ofile, 0666) do |db|
      @db.each {|k,v| db[k.to_s] = Utility.encode(v)}
    end
  when :sqlite
    db = SQLite::Database.open(@opts.ofile)
    begin
      db.execute("drop table tmud;")
    rescue
    end
    db.execute("create table tmud (id integer primary key, data text);")
    @db.each {|k,v| db[k] = Utility.encode(v)}
    db.close
  when :sqlite3
    db = SQLite3::Database.open(@opts.ofile)
    begin
      db.execute("drop table tmud;")
    rescue Exception
    end
    db.execute("create table tmud (id integer primary key, data text);")
    @db.each {|k,v| db[k] = Utility.encode(v)}
    db.close
  end

  puts "Highest object in use   : #{@dbtop}"
  puts "Count of objects dumped : #{@count}"
end