Skip to content

Instantly share code, notes, and snippets.

@jamesu
Created August 29, 2011 15:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jamesu/1178612 to your computer and use it in GitHub Desktop.
Save jamesu/1178612 to your computer and use it in GitHub Desktop.
DumbStore

DumbStore

A rather dumb storage solution. By default all data will be stored in "database.dumb" in the current directory.

Usage

Usage: dumbstore.rb [options] set/get/delete/keys <key> <value>
    -d, --database PATH              Path to database
    -h, --help                       Display this screen

e.g.

Setting, getting and deleting a value

$ dumbstore.rb set answer 42
$ dumbstore.rb get answer # 42
$ dumbstore.rb delete answer
$ dumbstore.rb get answer # error code

Getting keys

$ dumbstore.rb set key1 1
$ dumbstore.rb set key2 2
$ dumbstore.rb keys key* # key1 key2
#!/usr/bin/env ruby
require 'optparse'
OPTS = {}
def error_out(msg)
puts msg; exit false
end
def entry(args)
error_out($optusage) if args.length < 2
cmd, key = args
dbp = OPTS[:path] || "#{Dir.getwd}/database.dumb"
if !File.directory?(dbp)
Dir.mkdir(dbp) rescue error_out("Could not load database #{dbp}")
end
case cmd.downcase.to_sym
when :set
error_out("Please specify a value") if args.length < 3
File.open("#{dbp}/#{key}", 'w'){|f| f.write args[2]} rescue error_out("Couldn't set #{key}")
when :get
print File.open("#{dbp}/#{key}").read rescue exit false
when :keys
puts Dir["#{dbp}/#{key}"].map{|f|File.basename(f)}.join(' ')
when :delete
FileUtils.rm("#{dbp}/#{key}") rescue error_out("Couldn't delete #{key}")
else
error_out("Unknown command #{cmd}")
end
exit true
end
OptionParser.new do |u|
u.banner = "Usage: dumbstore.rb [options] set/get/delete/keys <key> <value>"
u.on( '-d', '--database PATH', 'Path to database' ) { |path| OPTS[:path] = path }
u.on( '-h', '--help', 'Display this screen' ) { puts u; exit }
$optusage=u
end.parse!
entry(ARGV)
@actsasbuffoon
Copy link

Seems like this would be very IO intensive for such a simple task.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment