ShamRack plumbs Net:HTTP into Rack.
Well, it makes it easy to stub out external (HTTP) services, which is handy in development and testing environments, or when you want to test your HTTP client code.
You can also use it to test your Rack application (or Sinatra, or Rails, or Merb) using arbitrary HTTP client libraries, to check interoperability. For instance, you could test your app using:
all without having to boot it in a server.
gem install sham_rack
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!"
ShamRack.at("sinatra.xyz").sinatra do
get "/hello/:subject" do
"Hello, #{params[:subject]}"
end
end
open("http://sinatra.xyz/hello/stranger").read #=> "Hello, stranger"
ShamRack.at("rackup.xyz").rackup do
use Some::Middleware
use Some::Other::Middleware
run MyApp.new
end
ShamRack.mount(my_google_stub, "google.com")
@stub_app = ShamRack.at("stubbed.com").stub
@stub_app.register_resource("/greeting", "Hello, world!", "text/plain")
open("http://stubbed.com/greeting").read #=> "Hello, world!"
@stub_app.last_request.path #=> "/greeting"
Or, just use Sinatra, as described above ... it's almost as succinct, and heaps more powerful.
- Your Rack request-handling code runs in the same Ruby VM, in fact the same Thread, as your request.