ShamRack
ShamRack plumbs Net:HTTP into Rack.
What's it for, again?
Well, you can test your HTTP client code, using ShamRack to stub out an external web-service. Think of it as FakeWeb on steriods.
Or, you can test your Rack application (or Sinatra, or Rails, or Merb) using arbitrary HTTP client libraries, to check interoperability. For instance, you could hit a local app using:
Installing it
gem sources -a http://gems.github.com
sudo gem install mdub-sham_rack
Using it
A simple inline application
require 'sham_rack'
ShamRack.at("www.example.com") do |env|
["200 OK", { "Content-type" => "text/plain" }, "Hello, world!"]
end
require 'open-uri'
open("http://www.example.com/").read #=> "Hello, world!"
Sinatra integration
ShamRack.at("sinatra.xyz").sinatra do
get "/hello/:subject" do
"Hello, #{params[:subject]}"
end
end
open("http://sinatra.xyz/hello/stranger").read #=> "Hello, stranger"
Rackup support
ShamRack.at("rackup.xyz").rackup do
use Some::Middleware
use Some::Other::Middleware
run MyApp.new
end
Any old app
ShamRack.mount(my_google_stub, "google.com")
What's the catch?
- It's brand new! (there will be dragons)
- Your Rack request-handling code runs in the same Ruby VM, in fact the same Thread, as your request.