Skip to content

Instantly share code, notes, and snippets.

@jimmycuadra
Created August 30, 2011 05:17
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 jimmycuadra/1180236 to your computer and use it in GitHub Desktop.
Save jimmycuadra/1180236 to your computer and use it in GitHub Desktop.

KeyValue

KeyValue is a simple key value store written in Ruby for Codebrawl #9. It provides programmatic and command line access to the store. The data is persisted as JSON, serialized to a file.

Programmatic access:

require "key_value"

kv = KeyValue.new

kv.set("foo", "bar") # => "bar"
kv.get("foo") # => "bar"
kv.keys # => ["foo"]
kv.delete("foo") # => "bar"

CLI access:

$ ./key_value.rb get [key]
$ ./key_value.rb set [key] [value]
$ ./key_value.rb keys
$ ./key_value.rb delete [key]
#!/usr/bin/env ruby -w
# encoding: utf-8
require "json"
class KeyValue
FILE = "#{ENV['HOME']}/.keyvalue"
def initialize
begin
@data = JSON.parse(File.read(FILE))
rescue Errno::ENOENT, JSON::ParserError
@data = {}
end
end
def get(key)
@data[key.to_s]
end
def set(key, value)
@data[key.to_s] = value
save
value
end
def keys
@data.keys
end
def delete(key)
value = @data.delete(key.to_s)
save
value
end
private
def save
File.open(FILE, "w") { |f| f.write(JSON.generate(@data)) }
end
end
if $0 == __FILE__
method, key, value = *ARGV
method ||= ""
kv = KeyValue.new
result = case method.to_sym
when :get
kv.get(key)
when :set
kv.set(key, value)
when :keys
kv.keys
when :delete
kv.delete(key)
else
<<-eos
Usage:
./key_value.rb get [key]
./key_value.rb set [key] [value]
./key_value.rb keys
./key_value.rb delete [key]
eos
end
puts result if result
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment