1
0
Fork 0
mirror of https://github.com/middleman/middleman.git synced 2022-11-09 12:20:27 -05:00

for some reason runcoderun LOVES rack-test 0.5.1

This commit is contained in:
tdreyno 2009-11-17 13:59:39 -08:00
parent 0dd285b3e3
commit 85250dddae
53 changed files with 128 additions and 121 deletions

26
.gitignore vendored
View file

@ -1,29 +1,5 @@
*.sw?
.DS_Store
coverage
rdoc
pkg
.sass-cache
bin/autospec
bin/compass
bin/css2sass
bin/cucumber
bin/edit_json.rb
bin/haml
bin/html2haml
bin/htmldiff
bin/launchy
bin/ldiff
bin/prettify_json.rb
bin/rackup
bin/rake
bin/ri
bin/sass
bin/sdoc
bin/sdoc-merge
bin/shotgun
bin/spec
bin/sprocketize
bin/thin
bin/tt
bin/smusher
.sass-cache

View file

@ -1,4 +1,5 @@
source "http://gemcutter.org"
bin_path "vendor/bin"
disable_rubygems
gem "thin"
@ -7,7 +8,7 @@ gem "templater"
gem "sprockets"
gem "sinatra"
gem "sinatra-content-for"
gem "rack-test"
gem "rack-test", "0.5.1"
gem "yui-compressor"
gem "haml"
gem "compass"

3
vendor/bin/autospec vendored Executable file
View file

@ -0,0 +1,3 @@
#!/Users/tdreyno/homebrew/Cellar/ruby/1.9.1-p243/bin/ruby
require File.join(File.dirname(__FILE__), "../gems/environment")
load File.join(File.dirname(__FILE__), "../gems/gems/rspec-1.2.9/bin/autospec")

3
vendor/bin/compass vendored Executable file
View file

@ -0,0 +1,3 @@
#!/Users/tdreyno/homebrew/Cellar/ruby/1.9.1-p243/bin/ruby
require File.join(File.dirname(__FILE__), "../gems/environment")
load File.join(File.dirname(__FILE__), "../gems/gems/compass-0.8.17/bin/compass")

3
vendor/bin/css2sass vendored Executable file
View file

@ -0,0 +1,3 @@
#!/Users/tdreyno/homebrew/Cellar/ruby/1.9.1-p243/bin/ruby
require File.join(File.dirname(__FILE__), "../gems/environment")
load File.join(File.dirname(__FILE__), "../gems/gems/haml-2.2.13/bin/css2sass")

3
vendor/bin/cucumber vendored Executable file
View file

@ -0,0 +1,3 @@
#!/Users/tdreyno/homebrew/Cellar/ruby/1.9.1-p243/bin/ruby
require File.join(File.dirname(__FILE__), "../gems/environment")
load File.join(File.dirname(__FILE__), "../gems/gems/cucumber-0.4.4/bin/cucumber")

3
vendor/bin/edit_json.rb vendored Executable file
View file

@ -0,0 +1,3 @@
#!/Users/tdreyno/homebrew/Cellar/ruby/1.9.1-p243/bin/ruby
require File.join(File.dirname(__FILE__), "../gems/environment")
load File.join(File.dirname(__FILE__), "../gems/gems/json-1.2.0/bin/edit_json.rb")

3
vendor/bin/haml vendored Executable file
View file

@ -0,0 +1,3 @@
#!/Users/tdreyno/homebrew/Cellar/ruby/1.9.1-p243/bin/ruby
require File.join(File.dirname(__FILE__), "../gems/environment")
load File.join(File.dirname(__FILE__), "../gems/gems/haml-2.2.13/bin/haml")

3
vendor/bin/html2haml vendored Executable file
View file

@ -0,0 +1,3 @@
#!/Users/tdreyno/homebrew/Cellar/ruby/1.9.1-p243/bin/ruby
require File.join(File.dirname(__FILE__), "../gems/environment")
load File.join(File.dirname(__FILE__), "../gems/gems/haml-2.2.13/bin/html2haml")

3
vendor/bin/htmldiff vendored Executable file
View file

@ -0,0 +1,3 @@
#!/Users/tdreyno/homebrew/Cellar/ruby/1.9.1-p243/bin/ruby
require File.join(File.dirname(__FILE__), "../gems/environment")
load File.join(File.dirname(__FILE__), "../gems/gems/diff-lcs-1.1.2/bin/htmldiff")

3
vendor/bin/launchy vendored Executable file
View file

@ -0,0 +1,3 @@
#!/Users/tdreyno/homebrew/Cellar/ruby/1.9.1-p243/bin/ruby
require File.join(File.dirname(__FILE__), "../gems/environment")
load File.join(File.dirname(__FILE__), "../gems/gems/launchy-0.3.3/bin/launchy")

3
vendor/bin/ldiff vendored Executable file
View file

@ -0,0 +1,3 @@
#!/Users/tdreyno/homebrew/Cellar/ruby/1.9.1-p243/bin/ruby
require File.join(File.dirname(__FILE__), "../gems/environment")
load File.join(File.dirname(__FILE__), "../gems/gems/diff-lcs-1.1.2/bin/ldiff")

3
vendor/bin/prettify_json.rb vendored Executable file
View file

@ -0,0 +1,3 @@
#!/Users/tdreyno/homebrew/Cellar/ruby/1.9.1-p243/bin/ruby
require File.join(File.dirname(__FILE__), "../gems/environment")
load File.join(File.dirname(__FILE__), "../gems/gems/json-1.2.0/bin/prettify_json.rb")

3
vendor/bin/rackup vendored Executable file
View file

@ -0,0 +1,3 @@
#!/Users/tdreyno/homebrew/Cellar/ruby/1.9.1-p243/bin/ruby
require File.join(File.dirname(__FILE__), "../gems/environment")
load File.join(File.dirname(__FILE__), "../gems/gems/rack-1.0.1/bin/rackup")

3
vendor/bin/rake vendored Executable file
View file

@ -0,0 +1,3 @@
#!/Users/tdreyno/homebrew/Cellar/ruby/1.9.1-p243/bin/ruby
require File.join(File.dirname(__FILE__), "../gems/environment")
load File.join(File.dirname(__FILE__), "../gems/gems/rake-0.8.7/bin/rake")

3
vendor/bin/ri vendored Executable file
View file

@ -0,0 +1,3 @@
#!/Users/tdreyno/homebrew/Cellar/ruby/1.9.1-p243/bin/ruby
require File.join(File.dirname(__FILE__), "../gems/environment")
load File.join(File.dirname(__FILE__), "../gems/gems/rdoc-2.4.3/bin/ri")

3
vendor/bin/sass vendored Executable file
View file

@ -0,0 +1,3 @@
#!/Users/tdreyno/homebrew/Cellar/ruby/1.9.1-p243/bin/ruby
require File.join(File.dirname(__FILE__), "../gems/environment")
load File.join(File.dirname(__FILE__), "../gems/gems/haml-2.2.13/bin/sass")

3
vendor/bin/sdoc vendored Executable file
View file

@ -0,0 +1,3 @@
#!/Users/tdreyno/homebrew/Cellar/ruby/1.9.1-p243/bin/ruby -KU
require File.join(File.dirname(__FILE__), "../gems/environment")
load File.join(File.dirname(__FILE__), "../gems/gems/sdoc-0.2.14.1/bin/sdoc")

3
vendor/bin/sdoc-merge vendored Executable file
View file

@ -0,0 +1,3 @@
#!/Users/tdreyno/homebrew/Cellar/ruby/1.9.1-p243/bin/ruby -KU
require File.join(File.dirname(__FILE__), "../gems/environment")
load File.join(File.dirname(__FILE__), "../gems/gems/sdoc-0.2.14.1/bin/sdoc-merge")

3
vendor/bin/shotgun vendored Executable file
View file

@ -0,0 +1,3 @@
#!/Users/tdreyno/homebrew/Cellar/ruby/1.9.1-p243/bin/ruby
require File.join(File.dirname(__FILE__), "../gems/environment")
load File.join(File.dirname(__FILE__), "../gems/gems/shotgun-0.4/bin/shotgun")

3
vendor/bin/smusher vendored Executable file
View file

@ -0,0 +1,3 @@
#!/Users/tdreyno/homebrew/Cellar/ruby/1.9.1-p243/bin/ruby
require File.join(File.dirname(__FILE__), "../gems/environment")
load File.join(File.dirname(__FILE__), "../gems/gems/smusher-0.4.2/bin/smusher")

3
vendor/bin/spec vendored Executable file
View file

@ -0,0 +1,3 @@
#!/Users/tdreyno/homebrew/Cellar/ruby/1.9.1-p243/bin/ruby
require File.join(File.dirname(__FILE__), "../gems/environment")
load File.join(File.dirname(__FILE__), "../gems/gems/rspec-1.2.9/bin/spec")

3
vendor/bin/sprocketize vendored Executable file
View file

@ -0,0 +1,3 @@
#!/Users/tdreyno/homebrew/Cellar/ruby/1.9.1-p243/bin/ruby
require File.join(File.dirname(__FILE__), "../gems/environment")
load File.join(File.dirname(__FILE__), "../gems/gems/sprockets-1.0.2/bin/sprocketize")

3
vendor/bin/thin vendored Executable file
View file

@ -0,0 +1,3 @@
#!/Users/tdreyno/homebrew/Cellar/ruby/1.9.1-p243/bin/ruby
require File.join(File.dirname(__FILE__), "../gems/environment")
load File.join(File.dirname(__FILE__), "../gems/gems/thin-1.2.5/bin/thin")

3
vendor/bin/tt vendored Executable file
View file

@ -0,0 +1,3 @@
#!/Users/tdreyno/homebrew/Cellar/ruby/1.9.1-p243/bin/ruby
require File.join(File.dirname(__FILE__), "../gems/environment")
load File.join(File.dirname(__FILE__), "../gems/gems/treetop-1.4.2/bin/tt")

BIN
vendor/gems/cache/rack-test-0.5.1.gem vendored Normal file

Binary file not shown.

View file

@ -3,71 +3,71 @@ module Bundler
file = File.expand_path(__FILE__)
dir = File.dirname(file)
ENV["PATH"] = "#{dir}/../../bin:#{ENV["PATH"]}"
ENV["PATH"] = "#{dir}/../bin:#{ENV["PATH"]}"
ENV["RUBYOPT"] = "-r#{file} #{ENV["RUBYOPT"]}"
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/term-ansicolor-1.0.4/bin")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/term-ansicolor-1.0.4/lib")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/httpclient-2.1.5.2/bin")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/httpclient-2.1.5.2/lib")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/builder-2.1.2/bin")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/builder-2.1.2/lib")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/polyglot-0.2.9/bin")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/polyglot-0.2.9/lib")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/treetop-1.4.2/bin")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/treetop-1.4.2/lib")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/term-ansicolor-1.0.4/bin")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/term-ansicolor-1.0.4/lib")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/extlib-0.9.13/bin")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/extlib-0.9.13/lib")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/highline-1.5.1/bin")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/highline-1.5.1/lib")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/diff-lcs-1.1.2/bin")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/diff-lcs-1.1.2/lib")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/cucumber-0.4.4/bin")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/cucumber-0.4.4/lib")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/rspec-1.2.9/bin")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/rspec-1.2.9/lib")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/templater-1.0.0/bin")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/templater-1.0.0/lib")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/eventmachine-0.12.10/bin")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/eventmachine-0.12.10/lib")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/daemons-1.0.10/bin")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/daemons-1.0.10/lib")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/haml-2.2.13/bin")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/haml-2.2.13/lib")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/httpclient-2.1.5.2/bin")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/httpclient-2.1.5.2/lib")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/rake-0.8.7/bin")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/rake-0.8.7/lib")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/rdoc-2.4.3/bin")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/rdoc-2.4.3/lib")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/json-1.2.0/bin")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/json-1.2.0/ext/json/ext")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/json-1.2.0/ext")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/json-1.2.0/lib")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/rake-0.8.7/bin")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/rake-0.8.7/lib")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/sprockets-1.0.2/bin")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/sprockets-1.0.2/lib")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/rack-1.0.1/bin")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/rack-1.0.1/lib")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/thin-1.2.5/bin")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/thin-1.2.5/lib")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/rack-test-0.5.2/bin")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/rack-test-0.5.2/lib")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/smusher-0.4.2/bin")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/smusher-0.4.2/lib")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/configuration-1.1.0/bin")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/configuration-1.1.0/lib")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/extlib-0.9.13/bin")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/extlib-0.9.13/lib")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/diff-lcs-1.1.2/bin")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/diff-lcs-1.1.2/lib")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/launchy-0.3.3/bin")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/launchy-0.3.3/lib")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/sdoc-0.2.14.1/bin")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/sdoc-0.2.14.1/lib")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/rspec-1.2.9/bin")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/rspec-1.2.9/lib")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/cucumber-0.4.4/bin")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/cucumber-0.4.4/lib")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/daemons-1.0.10/bin")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/daemons-1.0.10/lib")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/yui-compressor-0.9.1/bin")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/yui-compressor-0.9.1/lib")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/highline-1.5.1/bin")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/highline-1.5.1/lib")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/haml-2.2.13/bin")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/haml-2.2.13/lib")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/compass-0.8.17/bin")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/compass-0.8.17/lib")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/eventmachine-0.12.10/bin")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/eventmachine-0.12.10/lib")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/sprockets-1.0.2/bin")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/sprockets-1.0.2/lib")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/templater-1.0.0/bin")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/templater-1.0.0/lib")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/shotgun-0.4/bin")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/shotgun-0.4/lib")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/sinatra-0.9.4/bin")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/sinatra-0.9.4/lib")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/smusher-0.4.2/bin")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/smusher-0.4.2/lib")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/rdoc-2.4.3/bin")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/rdoc-2.4.3/lib")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/sdoc-0.2.14.1/bin")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/sdoc-0.2.14.1/lib")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/compass-0.8.17/bin")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/compass-0.8.17/lib")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/sinatra-content-for-0.2/bin")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/sinatra-content-for-0.2/lib")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/yui-compressor-0.9.1/bin")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/yui-compressor-0.9.1/lib")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/thin-1.2.5/bin")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/thin-1.2.5/lib")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/rack-1.0.1/bin")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/rack-1.0.1/lib")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/rack-test-0.5.1/bin")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/rack-test-0.5.1/lib")
@gemfile = "#{dir}/../../Gemfile"

View file

@ -1,10 +1,3 @@
== 0.5.2 / 2009-11-13
* Bug fixes
* Call close on response body after iteration, not before (Simon Rozet)
* Add missing require for time in cookie_jar.rb (Jerry West)
== 0.5.1 / 2009-10-27
* Bug fixes

View file

@ -28,10 +28,9 @@ module Rack
env["HTTP_COOKIE"] ||= cookie_jar.for(uri)
@last_request = Rack::Request.new(env)
status, headers, body = @app.call(@last_request.env)
@last_response = MockResponse.new(status, headers, body, env["rack.errors"].flush)
body.close if body.respond_to?(:close)
@last_response = MockResponse.new(status, headers, body, env["rack.errors"].flush)
cookie_jar.merge(last_response.headers["Set-Cookie"], uri)
@after_request.each { |hook| hook.call }

View file

@ -9,7 +9,7 @@ require "rack/test/uploaded_file"
module Rack
module Test
VERSION = "0.5.2"
VERSION = "0.5.1"
DEFAULT_HOST = "example.org"
MULTIPART_BOUNDARY = "----------XnJLe9ZIbbGUYtzPQJ16u1"

View file

@ -1,5 +1,4 @@
require "uri"
require "time"
module Rack
module Test

View file

@ -2,11 +2,11 @@
Gem::Specification.new do |s|
s.name = %q{rack-test}
s.version = "0.5.2"
s.version = "0.5.1"
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
s.authors = ["Bryan Helmkamp"]
s.date = %q{2009-11-13}
s.date = %q{2009-10-27}
s.description = %q{Rack::Test is a small, simple testing API for Rack apps. It can be used on its
own or as a reusable starting point for Web frameworks and testing libraries
to build on. Most of its initial functionality is an extraction of Merb 1.0's

View file

@ -106,43 +106,13 @@ describe Rack::Test::Session do
last_request.env["rack.input"].read.should == "foo[bar]=1"
end
context "when the response body responds_to?(:close)" do
class CloseableBody
def initialize
@closed = false
end
def each
return if @closed
yield "Hello, World!"
end
def close
@closed = true
end
end
it "closes response's body" do
body = CloseableBody.new
body.should_receive(:close)
app = lambda do |env|
[200, {"Content-Type" => "text/html", "Content-Length" => "13"}, body]
end
session = Rack::Test::Session.new(Rack::MockSession.new(app))
session.request("/")
end
it "closes response's body after iteration" do
app = lambda do |env|
[200, {"Content-Type" => "text/html", "Content-Length" => "13"}, CloseableBody.new]
end
session = Rack::Test::Session.new(Rack::MockSession.new(app))
session.request("/")
session.last_response.body.should == "Hello, World!"
end
it "closes response's body" do
body = "Hello, World!"
body.should_receive(:close)
app = lambda {|env|
[200, {"Content-Type" => "text/html", "Content-Length" => "13"}, body]
}
Rack::Test::Session.new(Rack::MockSession.new(app)).request("/")
end
context "when input is given" do

View file

@ -2,11 +2,11 @@
Gem::Specification.new do |s|
s.name = %q{rack-test}
s.version = "0.5.2"
s.version = "0.5.1"
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
s.authors = ["Bryan Helmkamp"]
s.date = %q{2009-11-12}
s.date = %q{2009-10-26}
s.description = %q{Rack::Test is a small, simple testing API for Rack apps. It can be used on its
own or as a reusable starting point for Web frameworks and testing libraries
to build on. Most of its initial functionality is an extraction of Merb 1.0's