Rdb: Ruby-Nachbau der MWC /rdb-Werkzeuge
This commit is contained in:
+42
@@ -0,0 +1,42 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
# A Ruby re-creation of /rdb, the relational database tools Mark Williams
|
||||
# Company sold for COHERENT (~1991).
|
||||
|
||||
require 'open3'
|
||||
require 'date'
|
||||
require 'tmpdir'
|
||||
require 'fileutils'
|
||||
|
||||
module Rdb
|
||||
ROOT = File.expand_path('..', __dir__)
|
||||
NUM = /\A\s*[+-]?(\d+\.?\d*|\.\d+)\s*\z/
|
||||
|
||||
Command = Struct.new(:name, :desc, :syntax, :block)
|
||||
COMMANDS = {}
|
||||
|
||||
class << self
|
||||
def die(msg)
|
||||
abort "#{File.basename($PROGRAM_NAME)}: #{msg}"
|
||||
end
|
||||
|
||||
# register 'name', 'description', 'syntax' do |args| ... end
|
||||
def register(name, desc, syntax = nil, &block)
|
||||
COMMANDS[name] = Command.new(name, desc, syntax || name, block)
|
||||
end
|
||||
|
||||
def alias_for(name, target)
|
||||
cmd = COMMANDS.fetch(target)
|
||||
COMMANDS[name] = Command.new(name, cmd.desc, cmd.syntax.sub(target, name), cmd.block)
|
||||
end
|
||||
|
||||
def run(name, args)
|
||||
cmd = COMMANDS[name] or die("unknown command '#{name}'")
|
||||
Env.new(name).instance_exec(args.dup, &cmd.block)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
require_relative 'rdb/table'
|
||||
require_relative 'rdb/env'
|
||||
Dir[File.join(__dir__, 'rdb/cmd/*.rb')].sort.each { |f| require f }
|
||||
Reference in New Issue
Block a user