Skip to content

Instantly share code, notes, and snippets.

@hasancc
Created September 7, 2015 12:21
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 hasancc/4f362374e7dcd2cfb0fa to your computer and use it in GitHub Desktop.
Save hasancc/4f362374e7dcd2cfb0fa to your computer and use it in GitHub Desktop.
RC Simple DB Server
require 'sinatra'
require 'json'
set :port, 4000
class Store
@@store = {}
def self.init
@@store = {}
end
def self.set kvp
key, value = kvp.first
@@store[key] = value
end
def self.get key
value = ""
if @@store.has_key? key
value = @@store[key]
else
raise "No such key"
end
end
end
configure do
Store::init
end
get '/' do
"Hi!"
end
get '/set' do
params.each do |key, value|
Store::set key => value
end
status 200
body "success"
end
get '/get' do
begin
value = Store::get params["key"]
response = {params["key"] => value}
status 200
body response.to_json
rescue Exception => e
status 404
body e.message
end
end
require_relative './rc_database_server'
require 'minitest/autorun'
require 'rack/test'
class RCDatabaseServerTest < Minitest::Test
include Rack::Test::Methods
def app
Sinatra::Application
end
def test_should_set_kvp
get '/set?key1=value1'
assert_equal "success", last_response.body
assert_equal 200, last_response.status
end
def test_should_get_kvp
get '/get?key=key1'
assert_equal 200, last_response.status
assert_equal ({"key1"=>"value1"}).to_json, last_response.body
end
def test_should_update_kvp
get '/set?key1=value2'
assert_equal "success", last_response.body
assert_equal 200, last_response.status
get '/get?key=key1'
assert_equal 200, last_response.status
assert_equal ({"key1"=>"value2"}).to_json, last_response.body
end
def test_should_set_multiple_kvps
get '/set?key2=value2&key3=value3'
assert_equal "success", last_response.body
assert_equal 200, last_response.status
get '/get?key=key2'
assert_equal 200, last_response.status
assert_equal ({"key2"=>"value2"}).to_json, last_response.body
get '/get?key=key3'
assert_equal 200, last_response.status
assert_equal ({"key3"=>"value3"}).to_json, last_response.body
end
def test_should_return_404_for_unidentified_key
get '/get?key=key4'
assert_equal 404, last_response.status
assert_equal "No such key", last_response.body
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment